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
//              +-- -- --++-- +-In the name of ALLAH-+ --++-- -- --+              \\

#include <bits/stdc++.h>

#define F first
#define S second
#define _sz(x) (int)x.size()

using namespace std ;
using ll = long long ;
using ld = long double ;
using pii = pair <int , int> ;

int const N = 5e5 + 20 ;
int n , k , a[N] , res[N] ;
set <int> st ;

pii seg[N << 2] ;

void modify (int p , int val , int v = 1 , int s = 0 , int e = n) {
	if (s + 1 == e) {
		seg[v] = pii(val , s) ;
		return ;
	}

	int mid = (s + e) >> 1 , lc = v << 1 , rc = lc | 1 ;

	if (p < mid) modify(p , val , lc , s , mid) ;
	else modify(p , val , rc , mid , e) ;

	seg[v] = max(seg[lc] , seg[rc]) ;
}

pii get (int l , int r , int v = 1 , int s = 0 , int e = n) {
	if (s >= r || e <= l) return pii(-1 , 0) ;
	if (s >= l && e <= r) return seg[v] ;

	int mid = (s + e) >> 1 , lc = v << 1 , rc = lc | 1 ;

	return max( get(l , r , lc , s , mid) , get(l , r , rc , mid , e) ) ;
}

inline void rel (int b) {
	int xl = b * k , xr = min(n , xl + k) ;

	pii p = get(xl , xr) ;
	int index = p.S ;

	if (a[index] && p == get(max(0 , index - k + 1) , min(n , index + k)))
		st.insert(index) ;
}

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

	cin >> n >> k ;
	for (int i = 0 ; i < n ; i ++) cin >> a[i] ;

	for (int i = 0 ; i < n ; i ++) modify(i , a[i]) ;

	for (int i = 0 ; i < n ; i += k) rel(i / k) ;

	for (int i = 0 ; i < n ; i ++) {
		int index = *st.rbegin() ;
		res[index] = n - i ;
		st.erase(index) ;
		a[index] = 0 ;
		modify(index , a[index]) ;
		
		int b = index / k ;

		rel(b) ;
		if (b) rel(b - 1) ;
		if (b + 1 <= (n - 1) / k) rel(b + 1) ;
	}

	for (int i = 0 ; i < n ; i ++) cout << res[i] << '\n' ;
}
