#include <bits/stdc++.h>
using namespace std;
#define ll long long int
const int mod = 1e9+7;
const int MAX_N = 1e6;
unordered_map<ll,ll>factorialPrimeFactors;
vector<ll>spf(MAX_N+1,1);


void computeSPF(){
	for(int i=2;i<=MAX_N;i++){
		spf[i] = i;
	}
	
	for(ll i=2;i*i<=MAX_N;i++){
		if(spf[i]==i){
			ll start = i*i;
			for(ll j= start;j<=MAX_N;j+=i){
				spf[j] = i;
			}
		}
	}
}

unordered_map<ll,ll> getPrimeFactorization(ll x){
	unordered_map<ll,ll>factors;
	while(x!=1){
		ll g = spf[x];
		factors[g]++;
		x = x/g;
	}
	return factors;
}

void computeFactorialPrimeFactors(ll M){
	for(ll i=2;i<=M;i++){
		unordered_map<ll,ll>factors = getPrimeFactorization(i);
		for(auto [prime,count]:factors){
			factorialPrimeFactors[prime] += count;
		}
	}
}

ll computeDivisors(unordered_map<ll,ll>& factors){
	ll divisors = 1;
	for(auto [prime,exp]:factors){
		divisors = ((divisors * (exp+1)%mod)%mod);
	}
	return divisors;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	ll N,M;
	cin>>N>>M;
	computeSPF();
	vector<ll>A(N);
	for(ll i=0;i<N;i++){
		cin>>A[i];
	}
	
	computeFactorialPrimeFactors(M);
	
	vector<ll>B(N);
	for(ll i=0;i<N;i++){
		// get factors for A[i]
		unordered_map<ll,ll>factors = getPrimeFactorization(A[i]);
		
		// Merge with factorial factors
		for(auto [prime,exp] : factorialPrimeFactors){
			factors[prime] += exp;
		}
		
		B[i] = computeDivisors(factors);
	}
	
	// print divisors
	for(ll i=0;i<N;i++){
		cout<<B[i]<<" ";
	}
	
	return 0;
}