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;
const int maxx = 5e5 + 20;
int co, tbox, st[maxx * 4], k, n, ans[maxx], p[maxx], q[maxx];
priority_queue<int> pq;
void build(int id = 1, int l = 0, int r = n) {
  if (l + 1 == r) {
    st[id] = p[l];
    return;
  }
  int mid = (l + r) / 2;
  build(id * 2, l, mid);
  build(id * 2 + 1, mid, r);
  st[id] = max(st[id * 2], st[id * 2 + 1]);
}
int mx(int x, int y, int id = 1, int l = 0, int r = n) {
  if (x >= r || l >= y) return -1;
  if (x <= l && r <= y) return st[id];
  int mid = (l + r) / 2;
  return max(mx(x, y, id * 2, l, mid), mx(x, y, id * 2 + 1, mid, r));
}
void modify(int x, int k, int id = 1, int l = 0, int r = n) {
  if (l + 1 == r) {
    st[id] = k;
    return;
  }
  int mid = (l + r) / 2;
  if (x < mid)
    modify(x, k, id * 2, l, mid);
  else
    modify(x, k, id * 2 + 1, mid, r);
  st[id] = max(st[id * 2], st[id * 2 + 1]);
}
void _set(int id) {
  int ja, x = mx(id * k, min(n, id * k + k));
  if (x == -1) {
    return;
  }
  ja = q[x];
  if (mx(max(0, ja - k + 1), min(n, ja + k)) == x) pq.push(ja);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  co = n - 1;
  for (int i = 0; i < n; i++) cin >> p[i], q[p[i]] = i;
  build();
  tbox = n / k + (n % k != 0);
  for (int i = 0; i < tbox; i++) _set(i);
  while (co >= 0) {
    int x, ja = pq.top();
    pq.pop();
    if (mx(ja, ja + 1) == -1) continue;
    x = p[ja];
    ans[co--] = ja + 1;
    modify(ja, -1);
    ja /= k;
    _set(ja);
    if (ja) _set(ja - 1);
    if (ja + 1 < tbox) _set(ja + 1);
  }
  for (int i = 0; i < n; i++) cout << ans[i] << '\n';
  return 0;
}
