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