#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
void computespf(vector<int> &spf){
ll maxn = 1000000;
spf.resize(maxn+1);
vector<ll> arr(maxn+1,1);
for(ll i=0;i<=maxn;i++){
spf[i]=i;
}
for(ll i=2;i<=maxn;i++){
if(arr[i]){
ll j = i*i;
while(j<=maxn){
if(spf[j]==j){
spf[j]=i;
}
arr[j]=0;
j=j+i;
}
}
}
}
unordered_map<ll,ll> factorization(ll v1,vector<int> &spf){
unordered_map<ll,ll> mpp;
while(v1!=1){
ll d = spf[v1];
mpp[d]++;
v1=v1/d;
}
return mpp;
}
int main() {
vector<int> spf;
computespf(spf);
ll mod = 1e9 + 7;
int n,m;
cin>>n>>m;
unordered_map<ll,ll> mp2;
for(ll i=2;i<=m;i++){
unordered_map<ll,ll> mpp = factorization(i,spf);
for(auto it : mpp){
mp2[it.first] = mp2[it.first] + it.second;
}
}
vector<ll> arr(n+1);
for(ll i=1;i<=n;i++){
cin>>arr[i];
unordered_map<ll,ll> mp3 = mp2;
unordered_map<ll,ll> mp1 = factorization(arr[i],spf);
for(auto it : mp1){
mp3[it.first] = mp3[it.first] + it.second;
}
ll g=1;
for(auto it : mp3){
g=g%mod*(it.second%mod+1)%mod;
}
cout<<g%mod<<" ";
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CgoKdm9pZCBjb21wdXRlc3BmKHZlY3RvcjxpbnQ+ICZzcGYpewogICAgbGwgbWF4biA9IDEwMDAwMDA7CiAgICBzcGYucmVzaXplKG1heG4rMSk7CiAgICAKICAgIHZlY3RvcjxsbD4gYXJyKG1heG4rMSwxKTsKICAgIGZvcihsbCBpPTA7aTw9bWF4bjtpKyspewogICAgICAgIHNwZltpXT1pOwogICAgfQogICAgCiAgICBmb3IobGwgaT0yO2k8PW1heG47aSsrKXsKICAgICAgICBpZihhcnJbaV0pewogICAgICAgICAgICBsbCBqID0gaSppOwogICAgICAgICAgICB3aGlsZShqPD1tYXhuKXsKICAgICAgICAgICAgICAgIGlmKHNwZltqXT09ail7CiAgICAgICAgICAgICAgICAgICAgc3BmW2pdPWk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhcnJbal09MDsKICAgICAgICAgICAgICAgIGo9aitpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKCnVub3JkZXJlZF9tYXA8bGwsbGw+IGZhY3Rvcml6YXRpb24obGwgdjEsdmVjdG9yPGludD4gJnNwZil7CiAgICB1bm9yZGVyZWRfbWFwPGxsLGxsPiBtcHA7CiAgICB3aGlsZSh2MSE9MSl7CiAgICAgICAgbGwgZCA9IHNwZlt2MV07CiAgICAgICAgbXBwW2RdKys7CiAgICAgICAgdjE9djEvZDsKICAgIH0KICAgIHJldHVybiBtcHA7CiAgICAKfQoKaW50IG1haW4oKSB7CiAgICAgdmVjdG9yPGludD4gc3BmOwogICAgIGNvbXB1dGVzcGYoc3BmKTsKICAgICBsbCBtb2QgPSAxZTkgKyA3OwogICAgIAogICAgIAogICAgIGludCBuLG07CiAgICAgY2luPj5uPj5tOwogICAgIAogICAgIHVub3JkZXJlZF9tYXA8bGwsbGw+IG1wMjsKICAgICAKICAgICBmb3IobGwgaT0yO2k8PW07aSsrKXsKICAgICAgICB1bm9yZGVyZWRfbWFwPGxsLGxsPiBtcHAgPSBmYWN0b3JpemF0aW9uKGksc3BmKTsKICAgICAgICBmb3IoYXV0byBpdCA6IG1wcCl7CiAgICAgICAgICAgIG1wMltpdC5maXJzdF0gPSBtcDJbaXQuZmlyc3RdICsgaXQuc2Vjb25kOwogICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdmVjdG9yPGxsPiBhcnIobisxKTsKICAgICAKICAgICBmb3IobGwgaT0xO2k8PW47aSsrKXsKICAgICAgICAgY2luPj5hcnJbaV07CiAgICAgICAgIHVub3JkZXJlZF9tYXA8bGwsbGw+IG1wMyA9IG1wMjsKICAgICAgICAgdW5vcmRlcmVkX21hcDxsbCxsbD4gbXAxID0gZmFjdG9yaXphdGlvbihhcnJbaV0sc3BmKTsKICAgICAgICAgCiAgICAgICAgIGZvcihhdXRvIGl0IDogbXAxKXsKICAgICAgICAgICAgbXAzW2l0LmZpcnN0XSA9IG1wM1tpdC5maXJzdF0gKyBpdC5zZWNvbmQ7CiAgICAgICAgIH0KICAgICAgICAgbGwgZz0xOwogICAgICAgICBmb3IoYXV0byBpdCA6IG1wMyl7CiAgICAgICAgICAgIGc9ZyVtb2QqKGl0LnNlY29uZCVtb2QrMSklbW9kOwogICAgICAgICB9CiAgICAgICAgIGNvdXQ8PGclbW9kPDwiICI7CiAgICAgICAgIAogICAgIH0KICAgICAKICAgICAKICAgIAogICAgIAp9Cg==