#include<stdio.h>
struct Node{
int val,index;
}que[100];
int main()
{
int ans[100];
int N,K,i,head,tail,x;
scanf("%d %d",&N,&K);
head=tail=0;//tail指向队尾元素的下一个位置
for(i=0;i<N;i++){
scanf("%d",&x);
if(head<tail&&que[head].index<=i-K) head++;//如果队首的元素到队尾大于或等于K个,则T掉队首元素,因为当前元素一定要加入队列。
while(head<tail&&que[tail-1].val>=x)//队首存放最小值。
tail--;
que[tail].val=x;
que[tail++].index=i;
ans[i]=que[head].val;
}
for(i=K-1;i<N;i++)
printf("%d ",ans[i]);
printf("\n");
return 0;
}