#include <bits/stdc++.h>
using namespace std;
using LL = long long;
constexpr int N = 2e6 + 5;
int w[N];
struct Node
{
int l, r, f, val;
}stg[N * 4];
void pushup(int k)
{
stg[k].val = min(stg[k << 1].val, stg[k << 1 | 1].val);
}
inline void build(int l, int r, int k = 1)
{
stg[k].l = l, stg[k].r = r;
if(l == r)
{
stg[k].val = w[l];
return;
}
int mid = (l + r) >> 1;
if(l <= mid)build(l, mid, k << 1);
if(r > mid)build(mid + 1, r, k << 1 | 1);
pushup(k);
}
inline int query(int x, int y, int k = 1)
{
int l = stg[k].l, r = stg[k].r;
if(x <= l && y >= r)
{
return stg[k].val;
}
int mid = (l + r) >> 1, v = 999999999;
if(x <= mid)v = min(query(x, y, k << 1), v);
if(y > mid)v = min(v, query(x, y, k << 1 | 1));
return v;
}
void solve()
{
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; ++ i)cin >> w[i];
build(1, n);
for(int i = 1; i <= n; ++ i)
{
if(i == 1)cout << 0 << '\n';
else if(i == 2)cout << w[1] << '\n';
else{
int l = max(1, i - m);
int r = i - 1;
cout << query(l, r) << '\n';
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}