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>
using namespace std;
using ll = long long;
const int maxn = 500010;
int n, k, a[maxn], pos[maxn];
bool ok[maxn];
int res[maxn];
int close(int l, int r, int v) {
  int res = maxn;
  for (int i = l; i <= r; ++i)
    if (!ok[pos[i]]) res = min(res, abs(pos[i] - v));
  return res;
}
signed main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  cin >> n >> k;
  for (int i = 1; i <= n; ++i) cin >> a[i], pos[a[i]] = i;
  bool c = true;
  while (c) {
    c = false;
    for (int j = 2; j <= n; ++j)
      if (abs(pos[j] - pos[j - 1]) >= k && pos[j] < pos[j - 1])
        swap(pos[j], pos[j - 1]), swap(a[pos[j]], a[pos[j - 1]]), c = true;
    for (int j = n; j >= 2; --j)
      if (abs(pos[j] - pos[j - 1]) >= k && pos[j] < pos[j - 1])
        swap(pos[j], pos[j - 1]), swap(a[pos[j]], a[pos[j - 1]]), c = true;
  }
  for (int i = 1; i <= n; ++i) cout << a[i] << '\n';
}
