#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;
	}
}