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>
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
using namespace ::std;
const long long maxn = 1e5 + 500;
const long long inf = 1e9 + 800;
const long long mod = 1e9 + 7;
long long b[maxn];
bool vis[maxn];
long long t[maxn];
void update(long long l, long long r, long long ta, long long v) {
  for (long long i = 1; i < ta; i++) {
    if (l <= b[i] && b[i] <= r) {
      t[i] += v;
    }
  }
}
long long find_max0(long long n) {
  pair<long long, long long> mx = make_pair(0, 0);
  for (long long i = n; i >= 1; i--) {
    if (t[i] == 0 && vis[i] == 0) mx = max(mx, make_pair(b[i], i));
  }
  return mx.second;
}
void hazf(long long a) { vis[a] = 1; }
long long ans[maxn];
long long realans[maxn];
long long a[maxn];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, k;
  cin >> n >> k;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (long long i = 1; i <= n; i++) {
    b[a[i]] = i;
  }
  for (long long i = 1; i <= n; i++) {
    update(b[i] - k + 1, b[i] + k - 1, i, +1);
  }
  for (long long j = n; j >= 1; j--) {
    long long v = find_max0(n);
    ans[j] = b[v];
    update(b[v] - k + 1, b[v] + k - 1, v, -1);
    hazf(v);
  }
  for (long long i = 1; i <= n; i++) {
    realans[ans[i]] = i;
  }
  for (long long i = 1; i <= n; i++) {
    cout << realans[i] << ' ';
  }
}
