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
// Do you knOW what it feels like?

		// To be TorTured by your own MinD?
	
	// I don't wanna feel the PAIN.

// I BeG you to KILL me, pleASE...

#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("Os") 

#define F first
#define S second
#define pb push_back
#define SZ(x) (ll)(x.size())
#define all(x) x.begin(),x.end()
#define mp make_pair

typedef long long ll;
typedef pair<ll,ll> pll;
typedef long double ld;

//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const ll maxn=5e5+10, lg=23, mod=1e9+7, inf=1e18;

ll n,k;
ll a[maxn],ans[maxn],tt=0;

ll seg[maxn<<1];
void goz(ll i,ll x){ i--;
	seg[i+=n]=x;
	for(;i>1;i>>=1) seg[i>>1]=min(seg[i],seg[i^1]);
}
ll get(ll r,ll l=0){
	ll mn=inf;
	for(l+=n,r+=n;l<r;l>>=1,r>>=1){
		if(l&1) mn=min(mn,seg[l++]);
		if(r&1) mn=min(mn,seg[--r]);
	}
	return mn;
}

void sol(ll x){
	while(1){
		ll ag=get(a[x]-1);
		//cout<<x<<' '<<a[x]<<' '<<ag<<endl;
		if(ag>=x+k) break;
		sol(ag);
	}
	ans[x]=++tt;
	goz(a[x],inf);
}

int main(){
	ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);

	memset(seg,69,sizeof(seg));
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i], goz(a[i],i);
	for(int i=1;i<=n;i++){
		if(!ans[i]) sol(i);
		cout<<ans[i]<<endl;
	}

	return 0;
}








 




