You are given a permutation P_1 ... P_N of the set {1, 2, ..., N}.

You can apply the following operation to this permutation, any number of times (possibly zero):

* Choose two indices i,j (1 ≦ i < j ≦ N), such that j - i ≧ K and |P_i - P_j| = 1. Then, swap the values of P_i and P_j.



Among all permutations that can be obtained by applying this operation to the given permutation, find the lexicographically smallest one.

Constraints

* 2≦N≦500,000
* 1≦K≦N-1
* P is a permutation of the set {1, 2, ..., N}.

Input

The input is given from Standard Input in the following format:


N K
P_1 P_2 ... P_N


Output

Print the lexicographically smallest permutation that can be obtained.

Examples

Input

4 2
4 2 3 1


Output

2
1
4
3


Input

5 1
5 4 3 2 1


Output

1
2
3
4
5


Input

8 3
4 5 7 8 3 1 2 6


Output

1
2
6
7
5
3
4
8
#include<bits/stdc++.h>
using namespace std;
#define NN 500005
int n,m;
struct noshu{
	int out;
	int shu;
	int wei;
	bool operator<(const noshu t)const{
		if(out!=t.out) return out<t.out;
		else return shu<t.shu;
	}

}p[NN];
set<noshu>st1,st2;
set<noshu>::iterator it;

struct nowei{
	int out;
	int shu;
	int wei;
	bool operator<(const nowei t)const{
		if(out!=t.out) return out<t.out;
		else return wei<t.wei;
	}

}tt[NN];
set<nowei>stw;
set<nowei>::iterator itw,itt;
int out[NN];
int head[NN],next[NN],cnt,wei[NN];
int ans[NN];
void add(int u,int v){
	wei[cnt]=v;next[cnt]=head[u];head[u]=cnt++;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&p[i].shu);
		p[i].wei=i;
		p[i].out=0;		
	}
	memset(head,-1,sizeof(head));
	cnt=0;
	st1.clear();
	st2.clear();
	int l,r;
	l=1;
	r=1;
	for(int i=1;i<=n;i++){
		while(l+m<i){
			st1.erase(p[l]);
			l++;
		}
		it=st1.lower_bound(p[i]);
		if(it!=st1.begin()){
			it--;
			add(it->wei,i);
			out[i]++;
			//printf("~%d %d\n",it->wei,i);
		}
		st1.insert(p[i]);
		
		while(r-m<i&&r<=n){
			st2.insert(p[r]);
			r++;
		}
		st2.erase(p[i]);
		it=st2.lower_bound(p[i]);
		if(it!=st2.begin()){
			it--;
			add(it->wei,i);
			out[i]++;
			//printf("~%d %d\n",it->wei,i);
		}
	}
	stw.clear();
	for(int i=1;i<=n;i++){
		tt[i].out=out[i];
		tt[i].wei=p[i].wei;
		tt[i].shu=p[i].shu;	
		stw.insert(tt[i]);
	//	printf("%d %d %d\n",tt[i].wei,tt[i].shu,tt[i].out);
	} 
	/*for(int i=1;i<=n;i++){
		printf("%d:",i);
		for(int j=head[i];j!=-1;j=next[j]){
			printf(" %d",wei[j]);
		}printf("\n");
	}*/
	while(stw.begin()!=stw.end() &&stw.begin()->out==0){
		itw=stw.begin();
		printf("%d\n",itw->wei);
		for(int i=head[itw->wei];i!=-1;i=next[i]){
			itt=stw.find(tt[wei[i]]);
			nowei nono=*itt;
			nono.out--;
			stw.erase(itt);
			stw.insert(nono);
			tt[wei[i]]=nono;
		}
		stw.erase(itw);
	}

	
	
}

