#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int MOD = (int)1e9 + 7;
const int MAXN = (int)5e5 + 3;
const int infint = (int)1e9 + 3;
const ll inf = (ll)2e18;
int n, k, p[MAXN], q[MAXN], oc[MAXN];
set <int> L, R;
vector <int> G[MAXN];
int main() 
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> n >> k;
	for (int i = 1; i <= n; i++)
	{
		cin >> p[i];
		q[p[i]] = i;
	}
	for (int i = 1; i < k; i++)
		R.insert(p[i]);
	for (int i = 1; i <= n; i++) 
	{
		if (i + k - 1 <= n)
			R.insert(p[i + k - 1]);
		if (i)
			R.erase(p[i - 1]);
		L.insert(p[i]);
		if (i > k)
			L.erase(p[i - k]);
		auto it = R.upper_bound(p[i]);
		if (it != R.end())
			G[i].push_back(q[*it]), oc[q[*it]]++;
		it = L.upper_bound(p[i]);
		if (it != L.end())
			G[i].push_back(q[*it]), ++ oc[q[*it]];
	}
	L.clear(); R.clear();
	for (int i = 1; i <= n; ++ i) 
		if (oc[i] == 0)
			L.insert(i);
	int tp = 0;
	while (L.size())
	{
		int pos = (*L.begin());
		p[++tp] = pos;
		L.erase(L.begin());
		for (int i = 0; i < G[pos].size(); ++ i)
		{
			int v = G[pos][i]; -- oc[v];
			if (oc[v] != 0)
				continue;
			L.insert(v);
		}
	}
	for (int i = 1; i <= n; ++ i)
		q[p[i]] = i;
	for (int i = 1; i <= n; ++ i)
		cout << q[i] << "\n";
}
