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;
int tsize, tree[555555];
set<int> s;
int num[555555], pos[555555], degree[555555];
vector<int> e[555555], res, tmp;
int main(void) {
  int n, k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i < n + 1; i++) scanf("%d", &num[i]), pos[num[i]] = i;
  tsize = n;
  for (int i = 1; i < k + 1; i++) s.insert(num[i]);
  for (int i = 1; i < n + 1; i++) {
    if (k == 1) break;
    auto iter = s.lower_bound(num[i]);
    if (iter != s.begin()) {
      --iter;
      e[i].push_back(pos[*iter]), degree[pos[*iter]]++;
      ++iter;
    }
    ++iter;
    if (iter != s.end()) e[pos[*iter]].push_back(i), degree[i]++;
    if (i - k + 1 >= 1) s.erase(num[i - k + 1]);
    if (i + k <= n) s.insert(num[i + k]);
  }
  priority_queue<int> pq;
  for (int i = 1; i < n + 1; i++)
    if (!degree[i]) pq.push(i);
  for (int i = 1; i < n + 1; i++) {
    int k = pq.top();
    pq.pop();
    tmp.push_back(k);
    for (int kk : e[k]) {
      degree[kk]--;
      if (!degree[kk]) pq.push(kk);
    }
  }
  reverse(tmp.begin(), tmp.end());
  res.resize(n + 1);
  for (int i = 0; i < n; i++) res[tmp[i]] = i + 1;
  for (int i = 1; i < res.size(); i++) printf("%d\n", res[i]);
}
