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;
typedef int ll;
const ll MOD = 1000000007;
template <typename T, typename U>
istream &operator>>(istream &i, pair<T, U> &A) {
  i >> A.first >> A.second;
  return i;
}
template <typename T>
istream &operator>>(istream &i, vector<T> &A) {
  for (auto &I : A) {
    i >> I;
  }
  return i;
}
template <typename T, typename U>
ostream &operator<<(ostream &o, const pair<T, U> &A) {
  o << A.first << " " << A.second;
  return o;
}
template <typename T>
ostream &operator<<(ostream &o, const vector<T> &A) {
  int i = A.size();
  for (auto &I : A) {
    o << I << (--i ? " " : "");
  }
  return o;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  ll N, K;
  cin >> N >> K;
  vector<ll> A(N), B(N);
  cin >> A;
  vector<ll> bef(N);
  vector<ll> ans(N);
  for (int i = 0; i < N; i++) {
    A[i]--;
    B[A[i]] = i;
  }
  for (int i = 1; i < N; i++) {
    for (int j = 0; j + i < N; j += i << 1) {
      int lf = j, mid = j + i, rg = min<ll>(N, j + (i << 1));
      priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>>
          Q1, Q2;
      for (int k = lf; k < mid; k++) {
        Q1.push({B[k], k - lf});
      }
      for (int k = mid; k < rg; k++) {
        Q2.push({B[k], k - mid});
      }
      int mx = -1;
      while (!Q2.empty()) {
        pair<ll, ll> a = Q2.top();
        Q2.pop();
        while (!Q1.empty() && Q1.top().first < a.first + K) {
          mx = max<ll>(mx, Q1.top().second);
          Q1.pop();
        }
        bef[a.second] = mx;
      }
      for (int k = 1; k < rg - mid; k++) {
        bef[k] = max(bef[k], bef[k - 1]);
      }
      int idx = 0;
      int k = 0;
      for (int l = 0; l < mid - lf; l++) {
        while (k < rg - mid && bef[k] < l) {
          ans[idx++] = B[k + mid];
          k++;
        }
        ans[idx++] = B[l + lf];
      }
      for (int i = 0; i < idx; i++) {
        B[lf + i] = ans[i];
      }
    }
  }
  for (int i = 0; i < N; i++) {
    A[B[i]] = i;
  }
  for (auto &I : A) {
    cout << I + 1 << endl;
  }
  return 0;
}
