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 N = 500005;
int n, k, A[N], P[N], R[N], M[N], MX[N * 2];
priority_queue < int > Pq;
inline void Set(int i, int val)
{
    MX[i += n - 1] = val;
    for (; i; i >>= 1)
        MX[i >> 1] = max(MX[i], MX[i ^ 1]);
}
inline int Get(int l, int r)
{
    int Mx = 0;
    l = max(l, 1);
    r = min(r, n + 1);
    l += n - 1; r += n - 1;
    for (; l < r; l >>= 1, r >>= 1)
    {
        if (l & 1) Mx = max(Mx, MX[l ++]);
        if (r & 1) Mx = max(Mx, MX[-- r]);
    }
    return (Mx);
}
inline void Do(int block)
{
    int i = block * k + 1;
    if (i < 0 || i > n || M[block])
        return ;
    int Mx = Get(i, i + k);
    if (Mx && Get(R[Mx] - k + 1, R[Mx] + k) == Mx)
        M[block] = 1, Pq.push(R[Mx]);
}
int main()
{
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; i++)
        scanf("%d", &P[i]), R[P[i]] = i, Set(i, P[i]);
    for (int i = 0; i <= (n - 1) / k; i++)
        Do(i);
    for (int i = n; i; i --)
    {
        int id = Pq.top();
        Pq.pop();
        A[id] = i;
        Set(id, 0);
        M[(id - 1) / k] = 0;
        Do((id - 1) / k);
        Do((id - 1) / k - 1);
        Do((id - 1) / k + 1);
    }
    for (int i = 1; i <= n; i++)
        printf("%d\n", A[i]);
    return 0;
}