#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll MAXN = 1000000;
vector<ll> spf(MAXN + 1);
void compspf(){
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) { // Update spf[j] to the smallest prime factor
spf[j] = i;
}
}
}
}
}
unordered_map<int,int>cl(ll vl){
unordered_map<int,int>a2;
while(vl!=1){
ll d = spf[vl]; a2[d]++;
vl = vl/d;
}
return a2;
}
int main() {
int n,m ;
cin>>n>>m;
compspf();
ll md = 1e9+7;
unordered_map<ll,ll>a2;
for(int i = 2 ; i<=m ;i++){
unordered_map<int,int>b1 = cl(i);
for(auto it : b1){
a2[it.first]=a2[it.first]+it.second;
}
}
vector<int>b(n);
for(int i = 0;i < n ;i++){
ll g = 1;
cin>>b[i];
unordered_map <ll,ll> b5 = a2;
unordered_map<int,int>b1 = cl(b[i]);
for(auto it : b1){
b5[it.first]=b5[it.first]+it.second;
}
for(auto it : b5){
g = ((g%md)*( (it.second%md + 1%md)%md))%md;
}cout<<g<<endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CiAKY29uc3QgbGwgTUFYTiA9IDEwMDAwMDA7CiAKdmVjdG9yPGxsPiBzcGYoTUFYTiArIDEpOyAKCnZvaWQgY29tcHNwZigpewoJZm9yKGludCBpID0gMiA7aSA8PSBNQVhOIDtpKyspewoJCXNwZltpXT1pOwoJfQoJZm9yKGludCBpID0gMiA7IGkqaSA8PSBNQVhOIDtpKyspewoJCWlmKHNwZltpXSA9PSBpKXsKCQkJZm9yKGludCBqID0gaSppICA7IGo8PU1BWE4gOyBqKz0gaSl7CgkJCSBpZiAoc3BmW2pdID09IGopIHsgLy8gVXBkYXRlIHNwZltqXSB0byB0aGUgc21hbGxlc3QgcHJpbWUgZmFjdG9yCiAgICAgICAgICAgICAgICAgICAgc3BmW2pdID0gaTsKICAgICAgICAgICAgICAgIH0KCQkJfQoJCX0KCX0KfQp1bm9yZGVyZWRfbWFwPGludCxpbnQ+Y2wobGwgdmwpewoJdW5vcmRlcmVkX21hcDxpbnQsaW50PmEyOwoJIHdoaWxlKHZsIT0xKXsKICAgICAgICBsbCBkID0gc3BmW3ZsXTsgYTJbZF0rKzsKICAgICAgICB2bCA9IHZsL2Q7CiAgICB9CglyZXR1cm4gYTI7Cn0KaW50IG1haW4oKSB7CiAgIGludCBuLG0gOwogICBjaW4+Pm4+Pm07CiAgIGNvbXBzcGYoKTsKICAgbGwgbWQgPSAxZTkrNzsKICAgdW5vcmRlcmVkX21hcDxsbCxsbD5hMjsKICAgZm9yKGludCBpID0gMiA7IGk8PW0gO2krKyl7CgkJCXVub3JkZXJlZF9tYXA8aW50LGludD5iMSA9IGNsKGkpOwoJCQlmb3IoYXV0byBpdCA6IGIxKXsKCQkJCWEyW2l0LmZpcnN0XT1hMltpdC5maXJzdF0raXQuc2Vjb25kOwoJCQl9Cgl9CgoJdmVjdG9yPGludD5iKG4pOwoJZm9yKGludCBpID0gMDtpIDwgbiA7aSsrKXsKCQlsbCBnID0gMTsKCQljaW4+PmJbaV07CgkJCXVub3JkZXJlZF9tYXAgPGxsLGxsPiBiNSA9IGEyOyAKCQl1bm9yZGVyZWRfbWFwPGludCxpbnQ+YjEgPSBjbChiW2ldKTsKCQlmb3IoYXV0byBpdCA6IGIxKXsKCQkJCWI1W2l0LmZpcnN0XT1iNVtpdC5maXJzdF0raXQuc2Vjb25kOwoJCQl9CgkJCQlmb3IoYXV0byBpdCA6IGI1KXsKCSAgICAgICAgICAgCWcgPQkoKGclbWQpKiggKGl0LnNlY29uZCVtZCArIDElbWQpJW1kKSklbWQ7CgkJCX1jb3V0PDxnPDxlbmRsOwoJfQp9