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>
const int inf = 0x3f3f3f3f;
const int MAXN = 5e5+1;
int A[MAXN], ans[MAXN];
int seg[1<<20], _M;
#define min(a,b) ((a)<(b)?(a):(b))
void update(int i, int v)
{
	seg[i+=_M] = v;
	for(i>>=1; i; i>>=1)
		seg[i] = min(seg[i<<1], seg[(i<<1)|1]);
}
int query(int l, int r)
{
	int res = inf;
	for(l+=_M-1, r+=_M+1; l^r^1; l>>=1, r>>=1)
	{
		if(~l&1) res = min(res, seg[l^1]);
		if(r&1) res = min(res, seg[r^1]);
	}
	return res;
}
void init(int N)
{
	for(_M=1; _M<=N+2; _M<<=1);
	memset(seg, inf, _M*2*sizeof(seg[0]));
}
int idx, K;
void solve(int x)
{
	while (1)
	{
		int pos = query(1, A[x]-1);
		if(pos >= x+K) break;
		solve(pos);
	}
	ans[x] = ++idx;
	update(A[x], inf);
}
int main()
{
	int N, i;
	scanf("%d%d", &N, &K);
	init(N);
	for(i=1; i<=N; ++i)
	{
		scanf("%d", A+i);
		update(A[i], i);
	}
	for(i=1; i<=N; ++i)
	{
		if(!ans[i]) solve(i);
		printf("%d\n", ans[i]);
	}
}
