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 <cstdio>
#include <set>
#define N 500007
#define IL inline
#define REP(a,b,c) for(a=b;a<=c;a++)
#define PER(a,b,c) for(a=b;a>=c;a--)
using namespace std;
set<int> S;
set<int>::iterator it;
int n,k,P[N],Q[N];
int head[N],list[N<<1],next[N<<1],ap=1,d[N];
int a[N],len;
IL int rd(){
	int res=0;char c;while((c=getchar())<'0'||c>'9');
	while(c>='0'&&c<='9')res=res*10+c-'0',c=getchar();return res;
}
IL void link(int a,int b){
	list[++ap]=b,next[ap]=head[a],head[a]=ap,d[b]++;
}
IL void up(int i){
	int j=i>>1,x=a[i];
	while(j && x<a[j])a[i]=a[j],i=j,j>>=1;
	a[i]=x;
}
IL void down(int i){
	int j=i<<1,x=a[i];
	while(j<=len){
		if(j<len && a[j+1]<a[j])j++;
		if(a[j]<x)a[i]=a[j],i=j,j<<=1;else break;
	}
	a[i]=x;
}
IL void push(int b){a[++len]=b;up(len);}
IL int pop(){int b=a[1];a[1]=a[len--];down(1);return b;}
int main(){
	int i,x;
	n=rd(),k=rd();REP(i,1,n)Q[P[i]=rd()]=i;
	REP(i,1,n){
		if(i>k)S.erase(P[i-k]);it=S.insert(P[i]).first;
		if(++it!=S.end())link(i,Q[*it]);
	}
  S.clear();
	PER(i,n,1){
		if(i+k<=n)S.erase(P[i+k]);it=S.insert(P[i]).first;
		if(++it!=S.end())link(i,Q[*it]);
	}
	REP(i,1,n)if(!d[i])push(i);
	while(len){
		for(i=pop(),x=head[i];x;x=next[x])
			if(!--d[list[x]])push(list[x]);
		printf("%d\n",i);
	}
  return 0;
}