#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> spf(1000050);
void computeSPF(){
for(ll i=0;i<spf.size();i++)
spf[i]=i;
for(ll p=2;p<=sqrt(spf.size());p++){
if(spf[p]==p){
//this is prime
for(ll i=p*p;i<=spf.size();i=i+p){
if(spf[i]==i)
spf[i]=p;
}
}
}
}
unordered_map<ll, ll> findPF(ll val){
unordered_map<ll, ll> mp1;
while(val!=1){
ll d = spf[val];
mp1[d]++;
val=val/d;
}
return mp1;
}
int main() {
ll n, m;
cin>>n>>m;
vector<ll> array(n);
unordered_map<ll, ll> mp2;
for(ll i=0;i<n;i++)
cin>>array[i];
computeSPF();
ll md = 1e9 + 7;
//compute PF of M!
//M!=1x2x3x...xM so we loop from 2 till M
for(ll i=2;i<=m;i++){
unordered_map<ll, ll> temp=findPF(i);
for(auto it:temp){
//Merge in master map m2
mp2[it.first] += it.second;
}
//Now mp2 holds all PF of m!
}
for(ll i=0;i<array.size();i++){
//Store PF of array[i] in mp3
unordered_map<ll, ll> mp3=findPF(array[i]);
unordered_map<ll, ll> combined=mp2;
for(auto it: mp3){
combined[it.first]+=it.second;
}
ll g = 1;
for(auto it : combined){
g = (g * (it.second + 1)) % md;
}
cout << g << " ";
}
cout << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKdmVjdG9yPGxsPiBzcGYoMTAwMDA1MCk7CnZvaWQgY29tcHV0ZVNQRigpewoJZm9yKGxsIGk9MDtpPHNwZi5zaXplKCk7aSsrKQoJCXNwZltpXT1pOwoJZm9yKGxsIHA9MjtwPD1zcXJ0KHNwZi5zaXplKCkpO3ArKyl7CgkJaWYoc3BmW3BdPT1wKXsKCQkJLy90aGlzIGlzIHByaW1lCgkJCWZvcihsbCBpPXAqcDtpPD1zcGYuc2l6ZSgpO2k9aStwKXsKCQkJCWlmKHNwZltpXT09aSkKCQkJCQlzcGZbaV09cDsKCQkJfQoJCX0KCX0KfQoKdW5vcmRlcmVkX21hcDxsbCwgbGw+IGZpbmRQRihsbCB2YWwpewoJdW5vcmRlcmVkX21hcDxsbCwgbGw+IG1wMTsKCXdoaWxlKHZhbCE9MSl7CgkJbGwgZCA9IHNwZlt2YWxdOwoJCW1wMVtkXSsrOwoJCXZhbD12YWwvZDsKCX0KCXJldHVybiBtcDE7Cn0KCmludCBtYWluKCkgewoJbGwgbiwgbTsKCWNpbj4+bj4+bTsKCXZlY3RvcjxsbD4gYXJyYXkobik7Cgl1bm9yZGVyZWRfbWFwPGxsLCBsbD4gbXAyOwoJZm9yKGxsIGk9MDtpPG47aSsrKQoJCWNpbj4+YXJyYXlbaV07Cgljb21wdXRlU1BGKCk7CglsbCBtZCA9IDFlOSArIDc7CgkKCS8vY29tcHV0ZSBQRiBvZiBNIQoJLy9NIT0xeDJ4M3guLi54TSBzbyB3ZSBsb29wIGZyb20gMiB0aWxsIE0KCWZvcihsbCBpPTI7aTw9bTtpKyspewoJCXVub3JkZXJlZF9tYXA8bGwsIGxsPiB0ZW1wPWZpbmRQRihpKTsKCQlmb3IoYXV0byBpdDp0ZW1wKXsKCQkJLy9NZXJnZSBpbiBtYXN0ZXIgbWFwIG0yCgkJCW1wMltpdC5maXJzdF0gKz0gaXQuc2Vjb25kOwoJCX0KCQkvL05vdyBtcDIgaG9sZHMgYWxsIFBGIG9mIG0hCgl9Cglmb3IobGwgaT0wO2k8YXJyYXkuc2l6ZSgpO2krKyl7CgkJLy9TdG9yZSBQRiBvZiBhcnJheVtpXSBpbiBtcDMKCQl1bm9yZGVyZWRfbWFwPGxsLCBsbD4gbXAzPWZpbmRQRihhcnJheVtpXSk7CgkJdW5vcmRlcmVkX21hcDxsbCwgbGw+IGNvbWJpbmVkPW1wMjsKCQlmb3IoYXV0byBpdDogbXAzKXsKCQkJY29tYmluZWRbaXQuZmlyc3RdKz1pdC5zZWNvbmQ7CgkJfQoJCWxsIGcgPSAxOwoJCWZvcihhdXRvIGl0IDogY29tYmluZWQpewoJCQlnID0gKGcgKiAoaXQuc2Vjb25kICsgMSkpICUgbWQ7CgkJfQoJCWNvdXQgPDwgZyA8PCAiICI7Cgl9Cgljb3V0IDw8ICJcbiI7CglyZXR1cm4gMDsKfQ==