#include<>
#include<>
#include<>
#define N 10005
int Check[N];
int ImportData[N];
int P(int n){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0)
return 0;
}
return 1;
}
int HashFunction(int key,int n){
return key%n;
}
void Output(int a[],int n){
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
void Inputdata(int a[],int data[],int maxprime,int len,int num){
for(int i=0;i<num;i++){
int index=HashFunction(data[i],maxprime);
if (a[index]==data[i]){
continue;
}
if(!Check[index]){
a[index]=data[i];
Check[index]=1;
}
else{
for(int j=index+1;j!=index;j++){
if(j>=len){
j=0;
}
if (a[j]==data[i]){
break;
}
if(!Check[j]){
a[j]=data[i];
Check[j]=1;
break;
}
}
}
}
}
void InitTable(int a[],int n){
for(int i=0;i<n;i++){
Check[i]=0;
a[i]=0;
}
}
int Hash_Search(int key,int data[],int maxprime){
int index=HashFunction(key,maxprime);
if(!data[index])
return 0;
if(data[index]==key){
return index;
}
else{
for(int i=1;i<maxprime;i++){
index=HashFunction(key+i,maxprime);
if(!data[index]){
return 0;
}
if(data[index]==key){
return index;
}
}
return 0;
}
}
int main(){
int n,num;
while(scanf("%d %d",&num,&n)!=EOF){
int * data=(int *)malloc(sizeof(int)*n);
InitTable(data,n);
int maxprime;
int i=num;
while(1){
if(P(i)){
maxprime=i;
break;
}//最小素数
i++;
}
for(int j=0;j<num;j++){
scanf("%d",ImportData+j);
}
Inputdata(data,ImportData,maxprime,n,num);
for(int k=0;k<num;k++){
k!=num-1?printf("%d ",Hash_Search(ImportData[k],data,maxprime)):printf("%d\n",Hash_Search(ImportData[k],data,maxprime));
}
data=NULL;
}
return 0;
}