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>
#include <string>

using namespace std;
/*******************************************
****************** BY **********************
******* FUTURE GOOGLE EMPLOYEE *************
****** KARTHICK KUPPURAJ M *****************
********************************************/
#define ms(s, n) memset(s, n, sizeof(s))
#define pb push_back
#define pf push_front
#define mp make_pair
#define f first
#define s second
#define prec(n) fixed<<setprecision(n)
#define sll(x) scanf("%lld",&x);
#define pll(x) printf("%lld",x);
#define pn printf("\n");
#define ps printf(" ");
#define pc(c) printf("%c",c);
typedef long long int ll;
#define EPS 1e-9
const int MOD = (int) 1e9 + 7;
const int INF = (int) 1e9;
const ll LINF = (ll) 1e18;
set<pair<int, int>> st;
const int MAX = 5e5 + 2;
int p[MAX],t[MAX];
struct Node
{
    int l, r;
} a[MAX];

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n, k;
    cin >> n >> k;
    st.insert(mp(n + 1, n + 1));
    for (int i = 1; i <= n; ++i)
    {
        cin >> p[i];
        st.insert(mp(p[i], i));
        if (i - k > 0)
        {
            st.erase(mp(p[i - k], i - k));
        }
        t[i] = (*st.upper_bound(mp(p[i],i))).second;
        //cout<<t[i]<<" ";
    }
    int end = n + 1;
    int open = n + 2;
    a[open].r = end;
    a[end].l = open;
    for (int i = 1; i <= n; ++i)
    {
        a[i].r = t[i];
        a[i].l = a[t[i]].l;
        a[a[t[i]].l].r = i;
        a[t[i]].l = i;

    }
    for (int i = a[open].r, c = 1; i != end; i = a[i].r, c++)
    {
        p[i] = c;
    }
    for (int i = 1; i <= n; ++i)
    {
        cout << p[i] << endl;
    }
    return 0;
}