#include<queue>
#include<iostream>
using namespace std;
int k,n;
struct node{
int a;
int p;
}cur[2000001];
int mix=1e6;
int mex;
int maxn;
int mux;
queue<int>que;
inline int read(){
int s = 0, w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
return s * w;
}
inline void print(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) print(x/10);
putchar(char(x%10+'0'));
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cur[i].a=read(),cur[i].p=i;
for(int i=1;i<=k;i++) {
if(cur[i].a<mix) mix=cur[i].a,mex=i;
que.push(cur[i].a);
}
cout<<mix<<"\n";
for(int i=k+1;i<=n;i++){
que.push(cur[i].a);
que.pop();
if(i-mex>=k){
mux=que.front();
for(int j=1;j<=k;j++){
int temp=que.front();
que.pop();
que.push(temp);
if(temp<=mux) mux=temp,maxn=j;
}
mix=mux;
mex+=maxn;
}
else if(cur[i].a<=mix){
mix=cur[i].a;
mex=i;
}
print(mix);
printf("\n");
}
return 0;
}