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