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;
inline int readint()
{
    char c;int tmp=0,x=1;c=getchar();
    while(!isdigit(c)){if(c=='-') x=-1;c=getchar();}
    while(isdigit(c)){tmp=tmp*10+c-'0';c=getchar();}
    return tmp*x;
}
const int maxn=500000+5;
int p[maxn],q[maxn],deg[maxn],ans[maxn],n,k;
set<int > ss;
typedef set<int >::iterator seto;
vector<int > g[maxn];
void addedge(int from,int to)
{
    g[from].push_back(to);
    deg[to]++;
}
priority_queue<int ,vector<int >,greater<int > > pq;
int main()
{
    n=readint();k=readint();
    for(int i=1;i<=n;i++) q[p[i]=readint()]=i;
    seto ite;
    for(int i=1;i<=n;i++){
        if(i-k>=1) ss.erase(p[i-k]);
        ite=(ss.insert(p[i])).first;
        if(++ite!=ss.end()) addedge(i,q[*ite]);
    }
    ss.clear();
    for(int i=n;i>=1;i--){
        if(i+k<=n) ss.erase(p[i+k]);
        ite=(ss.insert(p[i])).first;
        if(++ite!=ss.end()) addedge(i,q[*ite]);
    }
    for(int i=1;i<=n;i++) if(deg[i]==0) pq.push(i);
    int res=0;
    while(!pq.empty()){
        int tp=pq.top();pq.pop();
        ans[tp]=++res;
        for(int j=0;j<(int)g[tp].size();j++) {
            deg[g[tp][j]]--;
            if(deg[g[tp][j]]==0) pq.push(g[tp][j]);
        }
    }
    for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
    return 0;
}
