import java.util.*;
public class Main {
private static final long MAXN = 1000000;
private static final long MOD = 1000000007;
private static long[] spf = new long[(int) MAXN + 1];
private static void computeSPF() {
for (int i = 2; i <= MAXN; i++) spf[i] = i;
for (int i = 2; i * i <= MAXN; i++) {
if (spf[i] == i) {
for (int j = i * i; j <= MAXN; j += i) {
if (spf[j] == j) spf[j] = i;
}
}
}
}
private static Map
<Long, Long
> factorize
(long value
) { Map
<Long, Long
> factors
= new HashMap
<>(); while (value != 1) {
long divisor = spf[(int) value];
factors.put(divisor, factors.getOrDefault(divisor, 0L) + 1);
value /= divisor;
}
return factors;
}
public static void main
(String[] args
) { Scanner scanner
= new Scanner
(System.
in); int n = scanner.nextInt();
int m = scanner.nextInt();
computeSPF();
Map
<Long, Long
> b1
= new HashMap
<>(); for (long i = 2; i <= m; i++) {
Map
<Long, Long
> factors
= factorize
(i
); for (Map.
Entry<Long, Long
> entry
: factors.
entrySet()) { b1.put(entry.getKey(), b1.getOrDefault(entry.getKey(), 0L) + entry.getValue());
}
}
long[] b = new long[n + 1];
for (int i = 1; i <= n; i++) {
b[i] = scanner.nextLong();
Map
<Long, Long
> b5
= new HashMap
<>(b1
); Map
<Long, Long
> factors
= factorize
(b
[i
]);
for (Map.
Entry<Long, Long
> entry
: factors.
entrySet()) { b5.put(entry.getKey(), b5.getOrDefault(entry.getKey(), 0L) + entry.getValue());
}
long g = 1;
for (Map.
Entry<Long, Long
> entry
: b5.
entrySet()) { g = (g * ((entry.getValue() % MOD + 1) % MOD)) % MOD;
}
}
scanner.close();
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNQVhOID0gMTAwMDAwMDsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTU9EID0gMTAwMDAwMDAwNzsKICAgIHByaXZhdGUgc3RhdGljIGxvbmdbXSBzcGYgPSBuZXcgbG9uZ1soaW50KSBNQVhOICsgMV07CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb21wdXRlU1BGKCkgewogICAgICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IE1BWE47IGkrKykgc3BmW2ldID0gaTsKICAgICAgICBmb3IgKGludCBpID0gMjsgaSAqIGkgPD0gTUFYTjsgaSsrKSB7CiAgICAgICAgICAgIGlmIChzcGZbaV0gPT0gaSkgewogICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IGkgKiBpOyBqIDw9IE1BWE47IGogKz0gaSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzcGZbal0gPT0gaikgc3BmW2pdID0gaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBNYXA8TG9uZywgTG9uZz4gZmFjdG9yaXplKGxvbmcgdmFsdWUpIHsKICAgICAgICBNYXA8TG9uZywgTG9uZz4gZmFjdG9ycyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICB3aGlsZSAodmFsdWUgIT0gMSkgewogICAgICAgICAgICBsb25nIGRpdmlzb3IgPSBzcGZbKGludCkgdmFsdWVdOwogICAgICAgICAgICBmYWN0b3JzLnB1dChkaXZpc29yLCBmYWN0b3JzLmdldE9yRGVmYXVsdChkaXZpc29yLCAwTCkgKyAxKTsKICAgICAgICAgICAgdmFsdWUgLz0gZGl2aXNvcjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhY3RvcnM7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgaW50IG4gPSBzY2FubmVyLm5leHRJbnQoKTsKICAgICAgICBpbnQgbSA9IHNjYW5uZXIubmV4dEludCgpOwoKICAgICAgICBjb21wdXRlU1BGKCk7CgogICAgICAgIE1hcDxMb25nLCBMb25nPiBiMSA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICBmb3IgKGxvbmcgaSA9IDI7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgICAgIE1hcDxMb25nLCBMb25nPiBmYWN0b3JzID0gZmFjdG9yaXplKGkpOwogICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxMb25nLCBMb25nPiBlbnRyeSA6IGZhY3RvcnMuZW50cnlTZXQoKSkgewogICAgICAgICAgICAgICAgYjEucHV0KGVudHJ5LmdldEtleSgpLCBiMS5nZXRPckRlZmF1bHQoZW50cnkuZ2V0S2V5KCksIDBMKSArIGVudHJ5LmdldFZhbHVlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBsb25nW10gYiA9IG5ldyBsb25nW24gKyAxXTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgYltpXSA9IHNjYW5uZXIubmV4dExvbmcoKTsKCiAgICAgICAgICAgIE1hcDxMb25nLCBMb25nPiBiNSA9IG5ldyBIYXNoTWFwPD4oYjEpOwogICAgICAgICAgICBNYXA8TG9uZywgTG9uZz4gZmFjdG9ycyA9IGZhY3Rvcml6ZShiW2ldKTsKCiAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PExvbmcsIExvbmc+IGVudHJ5IDogZmFjdG9ycy5lbnRyeVNldCgpKSB7CiAgICAgICAgICAgICAgICBiNS5wdXQoZW50cnkuZ2V0S2V5KCksIGI1LmdldE9yRGVmYXVsdChlbnRyeS5nZXRLZXkoKSwgMEwpICsgZW50cnkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxvbmcgZyA9IDE7CiAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PExvbmcsIExvbmc+IGVudHJ5IDogYjUuZW50cnlTZXQoKSkgewogICAgICAgICAgICAgICAgZyA9IChnICogKChlbnRyeS5nZXRWYWx1ZSgpICUgTU9EICsgMSkgJSBNT0QpKSAlIE1PRDsKICAgICAgICAgICAgfQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGcgKyAiICIpOwogICAgICAgIH0KICAgICAgICBzY2FubmVyLmNsb3NlKCk7CiAgICB9Cn0K