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>
#define MAXN 1000005
using namespace std;
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while (ch<'0'||ch>'9'){
        if (ch=='-') f=-1;
        ch=getchar();
    }
    while (ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^'0');
        ch=getchar();
    }
    return x*f;
}
int n,k;
int temp[MAXN],pos[MAXN],P[MAXN],mino[MAXN];
void Solve(int l,int r){
	if (l==r) return ;
	int mid=(l+r)>>1;
	Solve(l,mid),Solve(mid+1,r);
	for (int i=l;i<=r;++i) temp[i]=pos[i];
	mino[mid]=temp[mid];
	for (int i=mid-1;i>=l;--i) mino[i]=min(mino[i+1],temp[i]);
	int i=l,j=mid+1;
	int p=l;
	while (i<=mid&&j<=r){
		if (mino[i]<temp[j]+k) pos[p++]=temp[i++];
		else pos[p++]=temp[j++];
	}
	while (i<=mid) pos[p++]=temp[i++];
	while (j<=r) pos[p++]=temp[j++];
}
int main(){
	n=read(),k=read();
	for (int i=1;i<=n;++i) pos[read()]=i;
	Solve(1,n);
	for (int i=1;i<=n;++i) P[pos[i]]=i;
	for (int i=1;i<=n;++i) printf("%d\n",P[i]);
}