#pragma warning (disable:4786)
#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
using namespace std;
int n,m;
int B[100005];
int flag;
int cnt;//第几轮次被淘汰
int group[1005],num_in_group;
struct mice
{
int id;
int weight;
bool join;
int rounds;
int rank;
};
mice TT[100005];
bool judge()
{
for(int i=0;i<n;i++)
{
if(TT[i].join==false) return true;
}
return false;
}
bool cmp(mice a,mice b)
{
return a.rounds >b.rounds;
}
bool cmp1(mice a,mice b)
{
return a.id<b.id;
}
void process(int num)
{
if(flag==n-1)
{
TT[group[0]].rounds=cnt;
TT[group[0]].join=true;
return;
}
int _id=-1,_max=-1,i;
for(i=0;i<num;i++)
{
if(TT[group[i]].weight>_max)
{
_max=TT[group[i]].weight;
_id=i;
}
}
for(i=0;i<num;i++)
{
if(i==_id) continue;
TT[group[i]].rounds=cnt;
TT[group[i]].join=true;
flag++;
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j;
//-------input--------
for(i=0;i<n;i++)
{
scanf("%d",&TT[i].weight);
TT[i].join=false;
TT[i].id=i;
}
for(i=0;i<n;i++) scanf("%d",&B[i]);
//------group----------
cnt=1;
flag=0;
while(judge())
{
num_in_group=0;
for(i=0;i<n;i++)
{
if(TT[B[i]].join==true) continue;
group[num_in_group++]=B[i];
if(num_in_group==m)
{
process(num_in_group);
num_in_group=0;
}
}
if(num_in_group) process(num_in_group);
cnt++;
}
//-------output----------
sort(TT,TT+n,cmp);
TT[0].rank=1;
for(i=1;i<n;i++)
{
if(TT[i].rounds==TT[i-1].rounds)
TT[i].rank=TT[i-1].rank;
else TT[i].rank=i+1;
}
sort(TT,TT+n,cmp1);
for(i=0;i<n;i++)
{
if(i!=n-1)
printf("%d ",TT[i].rank);
else
printf("%d\n",TT[i].rank);
}
}
return 0;
}