#include <bits/stdc++.h>

using namespace std;
long long f(long long a, long long b)
{
    long long stepen=1,iz=0;
    while(a+b>0){
        if(a%2!=b%2){
            iz+=stepen;
        }
        a/=2;
        b/=2;
        stepen*=2;
    }
    return iz;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    long long n,k;
    cin>>n>>k;
    vector<long long>br(k),iz(k),pr,rez(k,1);
    vector<vector<long long>>delioci(k);
    delioci[0]={1};
    map<long long,long long>gde;
    for(int i=0;i<k;i++){
        cin>>br[i];
        iz[i]=br[i];
    }
    sort(br.begin(),br.end());
    for(int i=0;i<k;i++){
        gde[br[i]]=i;
    }
    vector<bool>prost(k,true);
    for(int i=1;i<k;i++){
        if(prost[i]==true){
            for(int j=i+1;j<k;j++){
                if(br[j]%br[i]==0){
                    prost[j]=false;
                }
            }
        pr.push_back(br[i]);
        }
    }
    rez[0]=1;
    for(int i=1;i<k;i++){
          //  cout<<i<<endl;
        bool nasao=false;
        int x=0;
        while(!nasao){
            if(br[i]%pr[x]==0){
                nasao=true;
            }else{
                x++;
            }
        }

        int y=gde[br[i]/pr[x]];
        int pok1=0,pok2=0;
        //cout<<x<<" "<<y<<endl;
        while(pok1<delioci[y].size()){
            if(delioci[y][pok1]<delioci[y][pok2]*pr[x]){
                delioci[i].push_back(delioci[y][pok1]);
                pok1++;
            }else if(delioci[y][pok1]>delioci[y][pok2]*pr[x]){
                delioci[i].push_back(delioci[y][pok2]*pr[x]);
                pok2++;
            }else{
                delioci[i].push_back(delioci[y][pok1]);
                pok1++;
                pok2++;
            }
        }
        while(pok2<delioci[y].size()){
                delioci[i].push_back(delioci[y][pok2]*pr[x]);
                pok2++;
        }
        for(int j=1;j<delioci[i].size();j++){
            //cout<<rez[i]<<" "<<delioci[i][j]<<" ";
            rez[i]=f(rez[i],delioci[i][j]);
          //  cout<<rez[i]<<endl;
        }
        //cout<<endl<<endl;
    }
    for(int i=0;i<k;i++){
        cout<<rez[gde[iz[i]]]<<" ";
    }
    return 0;
}