#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a, b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define DBG printf("this is a input\n")
#define fi first
#define se second
#define mk(a, b) make_pair(a,b)
#define p_queue priority_queue
ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a % b);
}
ll lcm(ll a, ll b) {
return a / gcd(a, b) * b;
}
struct node{
int index , val;
}q[2000005];
int n , m;
int num[2000005];
int main(void)
{
scanf("%d %d",&n , &m);
for(int i = 1 ; i <= n ; i ++)
scanf("%d",&num[i]);
int front = 1, back = 0;
for(int i = 1 ; i <= n ; i ++)
{
if(front > back)
printf("0\n");
else
{
if(q[front].index + m < i)
front ++;
printf("%d\n",q[front].val);
}
while(front <= back && q[back].val >= num[i])
back --;
back ++;
q[back].val = num[i];
q[back].index = i;
}
}