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;
long long read() {
  long long x = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') ch = getchar();
  while (ch >= '0' && ch <= '9')
    x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
  return x;
}
void write(long long x) {
  if (x < 10) {
    putchar(x + '0');
    return;
  }
  write(x / 10);
  putchar(x % 10 + '0');
}
const int N = 2020;
int m, n, a[N], p[N], d[N], head[N], cnt;
struct Edge {
  int to, next;
} edge[N * N];
void AddEdge(int u, int v) {
  edge[++cnt] = (Edge){v, head[u]}, head[u] = cnt;
  d[v]++;
}
priority_queue<int> q;
int main() {
  scanf("%d%d", &n, &m);
  if (n > 2000) return 1;
  for (int i = 1; i <= n; i++) scanf("%d", a + i), p[a[i]] = i;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
      if (abs(p[i] - p[j]) < m) AddEdge(p[i], p[j]);
  for (int i = 1; i <= n; i++)
    if (!d[i]) q.push(-i);
  while (!q.empty()) {
    int u = -q.top();
    q.pop();
    printf("%d\n", u);
    for (int i = head[u]; i; i = edge[i].next) {
      int v = edge[i].to;
      if (!(--d[v])) q.push(-v);
    }
  }
}
