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 <cstring>
#include <algorithm>
#include <cstdlib>
#include <queue>
#include <set>
#include <queue>
using namespace std;
#define N 500050
int head[N],to[N<<1],nxt[N<<1],cnt,n,a[N],p[N],du[N],K,Q[N],ans[N];
set<int>S,T;
priority_queue<int>q;
inline void add(int u,int v) {
	to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; du[v]++;
}
int main() {
	scanf("%d%d",&n,&K);
	int i,x,lq=0;
	for(i=1;i<=n;i++) scanf("%d",&a[i]),p[a[i]]=i;
	for(i=1;i<=K;i++) S.insert(a[i]);
	for(i=1;i<=n;i++) {
		set<int>::iterator it;
		it=S.upper_bound(a[i]);
		if(it!=S.end()) add(p[*it],i);
		it=T.upper_bound(a[i]);
		if(it!=T.end()) add(p[*it],i);
		T.insert(a[i]);if(i-K+1>=1) T.erase(a[i-K+1]);
		if(i+K<=n) S.insert(a[i+K]); S.erase(a[i]);
	}lq=n;
	for(i=1;i<=n;i++) if(!du[i]) q.push(i);
	while(!q.empty()) {
		x=q.top(); q.pop();
		Q[lq--]=x;
		for(i=head[x];i;i=nxt[i]) {
			if((--du[to[i]])==0) q.push(to[i]);
		}
	}
	for(i=1;i<=n;i++) ans[Q[i]]=i;
	for(i=1;i<=n;i++) printf("%d\n",ans[i]);
}
