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 eb emplace_back
#define INF 1e9

using namespace std;
typedef long long ll;

int loc[505050], arr[505050], k, tarr[505050], ans[505050];
set <int> st;

void dnc(int s, int e) {
	if(s == e) return;
	int m = s + e >> 1;
	dnc(s, m), dnc(m+1, e);

	int d1 = s, d2 = m+1, d = s;
	st.clear();
	for(int i = s; i <= m; i++) {
		st.insert(loc[i]);
	}
	while(d1 <= m && d2 <= e) {
		if(*st.begin() >= loc[d2] + k) {
			tarr[d++] = loc[d2++];
		}
		else {
			st.erase(loc[d1]);
			tarr[d++] = loc[d1++];
		}
	}
	while(d1 <= m) tarr[d++] = loc[d1++];
	while(d2 <= e) tarr[d++] = loc[d2++];
	for(int i = s; i <= e; i++) {
		loc[i] = tarr[i];
	}
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0);

	int n;
	cin >> n >> k;
	for(int i = 1; i <= n; i++) {
		cin >> arr[i];
		loc[arr[i]] = i;
	}
	dnc(1, n);

	for(int i = 1; i <= n; i++) {
		ans[loc[i]] = i;
	}
	for(int i = 1; i <= n; i++) {
		cout << ans[i] << ' ';
	}
}