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] , b[N] ;

inline void build_from (int n , int a[N] , int b[N]) {
	for (int i = 0 ; i < n ; i ++) a[b[i]] = i ;
}

int mn[N] , tmp[N] ;

void solve (int l , int r) {
	if (r - l == 1) return ;

	int mid = (l + r) >> 1 ;
	solve(l , mid) , solve(mid , r) ;

	mn[mid - 1] = b[mid - 1] ;
	for (int i = mid - 2 ; i >= l ; i --) mn[i] = min(mn[i + 1] , b[i]) ;

	int p1 = l , p2 = mid , pp = l ;

	while (p1 < mid || p2 < r) {
		if (p1 == mid) tmp[pp ++] = b[p2 ++] ;
		else if (p2 == r) tmp[pp ++] = b[p1 ++] ;
		else if (mn[p1] - b[p2] >= k) tmp[pp ++] = b[p2 ++] ;
		else tmp[pp ++] = b[p1 ++] ;
	}

	for (int i = l ; i < r ; i ++) b[i] = tmp[i] ;
}

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] ; 
		a[i] -- ; 
	}
	
	build_from(n , b , a) ;

	solve(0 , n) ;

	build_from(n , a , b) ;
	
	for (int i = 0 ; i < n ; i ++) cout << a[i] + 1 << '\n' ;
}
