#include<cstdio>
#include<cstring>
#include<set>
#include<vector>
#include<queue>
#include<algorithm>
const int N=500005;
using namespace std;
typedef set<int>::iterator siter;
int n,k,p[N],ans[N],pos[N],du[N],pr[N],pr1[N],cnt;
set<int> fr,bk;
vector<int> a[N];
priority_queue<int> q;
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&p[i]);
		ans[i]=p[i],pos[p[i]]=i;
	}
	for(int i=1;i<=k;i++)
        bk.insert(p[i]);
	for(int i=1;i<=n;i++)
	{
		siter f=bk.upper_bound(p[i]),g=fr.upper_bound(p[i]);
		if(f!=bk.end())
		{
			a[pos[*f]].push_back(i);
			du[i]++;
		}
		if(g!=fr.end())
		{
			a[pos[*g]].push_back(i);
			du[i]++;
		}
		fr.insert(p[i]);
		if(i-k+1>0)
            fr.erase(p[i-k+1]);
		if(i+k<=n)
            bk.insert(p[i+k]);
		bk.erase(p[i]);
	}
	for(int i=1;i<=n;i++)
		if(!du[i])
            q.push(i);
	while(!q.empty())
	{
		int x=q.top();
        q.pop();
		pr[++cnt]=x;
		for(int i=0,sz=a[x].size();i<sz;i++)
		{
			du[a[x][i]]--;
			if(!du[a[x][i]])
                q.push(a[x][i]);
		}
	}
	for(int i=1;i<=n;i++)
        pr1[pr[i]]=n-i+1;
	for(int i=1;i<=n;i++)
        printf("%d\n",pr1[i]);
}
