#include <bits/stdc++.h>
#include <chrono>
using namespace std;
using namespace chrono;
// "AJEET JAIN"----"JAI JINENDRA"
/* "णमो अरिहंताणं",
"णमो सिद्धाणं",
"णमो आयरियाणं",
"णमो उवज्झायाणं",
"णमो लोए सव्वसाहूणं",
"",
"एसो पंच नमोक्कारो, सव्व पावप्पणासणो",
"मंगलाणं च सव्वेसिं, पडमं हवै मंगलं", */
// Aliases to op
using ll = long long;
using ull = unsigned long long;
using ld = double;
using vll = vector<ll>;
// Constants
constexpr ll INF = 4e18;
constexpr ld EPS = 1e-9;
constexpr ll MOD = 1e9 + 7;
// Macros
#define F first
#define S second
#define all(x) begin(x), end(x)
#define allr(x) rbegin(x), rend(x)
#define py cout<<"YES\n";
#define pn cout<<"NO\n";
#define forn(i,n) for(int i=0;i<n;i++)
#define for1(i,n) for(int i=1;i<=n;i++)
// #define insert push_back
#define pb push_back
#define MP make_pair
#define endl '\n'
/*
remove substring or subarray ---> try to think about sliding w
*/
/*
Golden Rule
1) problem is easy
2) proofs is easy
3) implementation is easy
/*
ROUGH --
*/
ll MAXN = 1e6;
vector<ll> spf(MAXN + 1 );
void smallest_prime_factor() {
spf[0] = spf[1] = 1;
for (int i = 2; i <= MAXN; i++) {
if (spf[i] == 0) { // i is prime
spf[i] = i;
for (long long j = 1LL * i * i; j <= MAXN; j += i) {
if (spf[j] == 0)
spf[j] = i;
}
}
}
}
unordered_map<ll , ll> cl(ll vl){
unordered_map<ll , ll> a2;
while(vl != 1){
ll d = spf[vl];
a2[d]++;
vl = vl/d;
}
return a2;
}
void AJNJ(){
ll n,m;
cin>>n>>m;
smallest_prime_factor();
unordered_map<ll , ll> b1;
for(int i = 2 ; i <= m ; i++){
unordered_map<ll , ll> a2 = cl(i);
for(auto itr = a2.begin() ; itr != a2.end() ; itr++){
b1[itr->first] += itr->second;
}
}
ll b[n + 1];
for(int i = 1 ; i <= n ; i++){
unordered_map<ll, ll> b5 = b1;
ll ans = 1;
cin >> b[i];
unordered_map<ll , ll> a2 = cl(b[i]);
for(auto itr = a2.begin() ; itr != a2.end() ; itr++){
b5[itr->F] += itr->S;
}
for(auto x : b5){
ans = (ans % MOD * ((x.second % MOD + 1 % MOD)% MOD)) % MOD;
}
cout << ans << " ";
}
cout << endl;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T = 1;
auto start1 = high_resolution_clock::now();
while(T--){
AJNJ();
}
auto stop1 = high_resolution_clock::now();
auto duration = duration_cast<microseconds>(stop1 - start1);
cerr << "Time: " << duration . count() / 1000 << " ms" << endl;
return 0;
}
CiAgICAjaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KICAgICNpbmNsdWRlIDxjaHJvbm8+CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgdXNpbmcgbmFtZXNwYWNlIGNocm9ubzsKICAgIC8vICJBSkVFVCBKQUlOIi0tLS0iSkFJIEpJTkVORFJBIiAgCiAgICAvKiAi4KSj4KSu4KWLIOCkheCksOCkv+CkueCkguCkpOCkvuCko+CkgiIsCiAgICAgICAgIuCko+CkruCliyDgpLjgpL/gpKbgpY3gpKfgpL7gpKPgpIIiLAogICAgICAgICLgpKPgpK7gpYsg4KSG4KSv4KSw4KS/4KSv4KS+4KSj4KSCIiwKICAgICAgICAi4KSj4KSu4KWLIOCkieCkteCknOCljeCkneCkvuCkr+CkvuCko+CkgiIsCiAgICAgICAgIuCko+CkruCliyDgpLLgpYvgpI8g4KS44KS14KWN4KS14KS44KS+4KS54KWC4KSj4KSCIiwKICAgICAgICAiIiwKICAgICAgICAi4KSP4KS44KWLIOCkquCkguCkmiDgpKjgpK7gpYvgpJXgpY3gpJXgpL7gpLDgpYssIOCkuOCkteCljeCktSDgpKrgpL7gpLXgpKrgpY3gpKrgpKPgpL7gpLjgpKPgpYsiLAogICAgICAgICLgpK7gpILgpJfgpLLgpL7gpKPgpIIg4KSaIOCkuOCkteCljeCkteClh+CkuOCkv+Ckgiwg4KSq4KSh4KSu4KSCIOCkueCkteCliCDgpK7gpILgpJfgpLLgpIIiLCAgICovCiAgICAKICAgIAogICAgLy8gQWxpYXNlcyB0byBvcAogICAgdXNpbmcgbGwgPSBsb25nIGxvbmc7CiAgICB1c2luZyB1bGwgPSB1bnNpZ25lZCBsb25nIGxvbmc7CiAgICB1c2luZyBsZCA9IGRvdWJsZTsKICAgIHVzaW5nIHZsbCA9IHZlY3RvcjxsbD47CiAgICAKICAgIAogICAgLy8gQ29uc3RhbnRzCiAgICBjb25zdGV4cHIgbGwgSU5GID0gNGUxODsKICAgIGNvbnN0ZXhwciBsZCBFUFMgPSAxZS05OwogICAgY29uc3RleHByIGxsIE1PRCA9IDFlOSArIDc7CgoKICAgIAogICAgLy8gTWFjcm9zCiAgICAjZGVmaW5lIEYgZmlyc3QKICAgICNkZWZpbmUgUyBzZWNvbmQKICAgICNkZWZpbmUgYWxsKHgpIGJlZ2luKHgpLCBlbmQoeCkKICAgICNkZWZpbmUgYWxscih4KSByYmVnaW4oeCksIHJlbmQoeCkKICAgICNkZWZpbmUgcHkgY291dDw8IllFU1xuIjsKICAgICNkZWZpbmUgcG4gY291dDw8Ik5PXG4iOwogICAgI2RlZmluZSBmb3JuKGksbikgZm9yKGludCBpPTA7aTxuO2krKykKICAgICNkZWZpbmUgZm9yMShpLG4pIGZvcihpbnQgaT0xO2k8PW47aSsrKQoKICAgIC8vICNkZWZpbmUgaW5zZXJ0IHB1c2hfYmFjawogICAgI2RlZmluZSBwYiBwdXNoX2JhY2sKICAgICNkZWZpbmUgTVAgbWFrZV9wYWlyCiAgICAjZGVmaW5lIGVuZGwgJ1xuJwoKICAgIC8qCiAgICAgIHJlbW92ZSBzdWJzdHJpbmcgb3Igc3ViYXJyYXkgLS0tPiB0cnkgdG8gdGhpbmsgYWJvdXQgc2xpZGluZyB3CiAgICAKICAgICovICAgICAgICAgICAgICAgICAgCgogICAgIC8qCiAgICAgIAogICAgIEdvbGRlbiBSdWxlCgogICAgIDEpIHByb2JsZW0gaXMgZWFzeQogICAgIDIpIHByb29mcyBpcyBlYXN5CiAgICAgMykgaW1wbGVtZW50YXRpb24gaXMgZWFzeQogICAgIAogICAgIC8qCiAgICAgICAgIFJPVUdIIC0tCiAgICAgICAgICAgICAgICAgCiAgICAgKi8KICAgIGxsIE1BWE4gPSAxZTY7CiAgICB2ZWN0b3I8bGw+IHNwZihNQVhOICsgMSApOwoKICAgIHZvaWQgc21hbGxlc3RfcHJpbWVfZmFjdG9yKCkgewogICAgICAgIHNwZlswXSA9IHNwZlsxXSA9IDE7CiAgICAKICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8PSBNQVhOOyBpKyspIHsKICAgICAgICAgICAgaWYgKHNwZltpXSA9PSAwKSB7IC8vIGkgaXMgcHJpbWUKICAgICAgICAgICAgICAgIHNwZltpXSA9IGk7CiAgICAgICAgICAgICAgICBmb3IgKGxvbmcgbG9uZyBqID0gMUxMICogaSAqIGk7IGogPD0gTUFYTjsgaiArPSBpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNwZltqXSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICBzcGZbal0gPSBpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICB1bm9yZGVyZWRfbWFwPGxsICwgbGw+IGNsKGxsIHZsKXsKICAgICAgICAgdW5vcmRlcmVkX21hcDxsbCAsIGxsPiBhMjsKCiAgICAgICAgIHdoaWxlKHZsICE9IDEpewogICAgICAgICAgICBsbCBkID0gc3BmW3ZsXTsKICAgICAgICAgICAgYTJbZF0rKzsKICAgICAgICAgICAgdmwgPSB2bC9kOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhMjsKICAgIH0KCiAgICAKICAgIAogICAgdm9pZCBBSk5KKCl7CiAgICAgICBsbCBuLG07CiAgICAgICBjaW4+Pm4+Pm07CiAgICAgICBzbWFsbGVzdF9wcmltZV9mYWN0b3IoKTsKICAgICAgIHVub3JkZXJlZF9tYXA8bGwgLCBsbD4gYjE7CiAgICAgICBmb3IoaW50IGkgPSAyIDsgaSA8PSBtIDsgaSsrKXsKICAgICAgICAgIHVub3JkZXJlZF9tYXA8bGwgLCBsbD4gYTIgPSBjbChpKTsKCiAgICAgICAgICBmb3IoYXV0byBpdHIgPSBhMi5iZWdpbigpIDsgaXRyICE9IGEyLmVuZCgpIDsgaXRyKyspeyAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgYjFbaXRyLT5maXJzdF0gKz0gaXRyLT5zZWNvbmQ7CiAgICAgICAgICB9CiAgICAgICAKICAgICAgIH0KCiAgICAgICBsbCBiW24gKyAxXTsKICAgICAKICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspewogICAgICAgICAgdW5vcmRlcmVkX21hcDxsbCwgbGw+IGI1ID0gYjE7CiAgICAgICAgICBsbCBhbnMgPSAxOwogICAgICAgICAgIGNpbiA+PiBiW2ldOwogICAgICAgICAgIHVub3JkZXJlZF9tYXA8bGwgLCBsbD4gYTIgPSBjbChiW2ldKTsKCiAgICAgICAgICAgZm9yKGF1dG8gaXRyID0gYTIuYmVnaW4oKSA7IGl0ciAhPSBhMi5lbmQoKSA7IGl0cisrKXsKICAgICAgICAgICAgICAgYjVbaXRyLT5GXSArPSBpdHItPlM7CiAgICAgICAgICAgfQoKICAgICAgICAgICBmb3IoYXV0byB4IDogYjUpewogICAgICAgICAgICAgIGFucyA9IChhbnMgJSBNT0QgKiAoKHguc2Vjb25kICUgTU9EICsgMSAlIE1PRCklIE1PRCkpICUgTU9EOwogICAgICAgICAgIH0KCiAgICAgICAgICAgY291dCA8PCBhbnMgPDwgIiAiOwoKICAgICAgIH0KICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgCgogICAgfQoKICAgIAogICAgaW50IG1haW4oKXsKICAgICAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgICAgICBjaW4udGllKDApOwogICAgICAgIGNvdXQudGllKDApOwogICAgICAgIGludCBUID0gMTsKICAgICAgICBhdXRvIHN0YXJ0MSA9IGhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CiAgICAgICAgd2hpbGUoVC0tKXsKICAgICAgICAgICAgQUpOSigpOwogICAgICAgIH0KICAgICAgICBhdXRvIHN0b3AxID0gaGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgICAgICBhdXRvIGR1cmF0aW9uID0gZHVyYXRpb25fY2FzdDxtaWNyb3NlY29uZHM+KHN0b3AxIC0gc3RhcnQxKTsKICAgICAgICBjZXJyIDw8ICJUaW1lOiAiIDw8IGR1cmF0aW9uIC4gY291bnQoKSAvIDEwMDAgPDwgIiBtcyIgPDwgZW5kbDsKICAgIAogICAgICAgIHJldHVybiAwOwogICAgfQ==