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 MaxN = 5e5 + 5;
int N, K;
int P[MaxN], Pos[MaxN];
int Deg[MaxN], Q[MaxN];
set<int> S;
set<int>::iterator it;
vector<int> To[MaxN];
priority_queue<int, vector<int>, greater<int> > H;
void Add_Edge(int u, int v) {
  To[u].push_back(v);
  Deg[v]++;
}
int main() {
  int i, u, v;
  scanf("%d%d", &N, &K);
  for (i = 1; i <= N; i++) {
    scanf("%d", &P[i]);
    Pos[P[i]] = i;
  }
  for (i = 2; i <= N; i++) {
    S.insert(P[i - 1]);
    if (i > K) S.erase(P[i - K]);
    if ((it = S.upper_bound(P[i])) != S.end()) Add_Edge(i, Pos[*it]);
  }
  S.clear();
  for (i = N - 1; i; i--) {
    S.insert(P[i + 1]);
    if (i + K <= N) S.erase(P[i + K]);
    if ((it = S.upper_bound(P[i])) != S.end()) Add_Edge(i, Pos[*it]);
  }
  for (i = 1; i <= N; i++)
    if (!Deg[i]) H.push(i);
  while (H.size()) {
    u = H.top();
    printf("%d\n", u);
    H.pop();
    for (i = 0; i < To[u].size(); i++)
      if (!--Deg[v = To[u][i]]) H.push(v);
  }
  return 0;
}
