//滑动窗口 输出最小最大值
int n,k;
int a[N];
int q[N];//队列里面存的是下标
int main(){
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
int hh=0,tt=-1;
for(int i=0;i<n;i++){
//判断队列头是否已超出滑动窗口
if(hh<=tt && i-k+1>q[hh]) hh++;//此处用if 是因为已知一次只滑动一个单位
while(hh<=tt && a[q[tt]]>=a[i] ) tt--;//将滑动窗口优化为单调数列
q[++tt] = i;
if(i>=k-1) //数组大于滑动窗口才开始输出
printf("%d ",a[q[hh]]);//最小值在队列头
}
puts(" ");
hh=0;tt=-1;
for(int i=0;i<n;i++){
if(hh<=tt && i-k+1>q[hh]) hh++;
while(hh<=tt && a[q[tt]] <=a[i]) tt--;
q[++tt] = i;
if(i>=k-1) printf("%d ",a[q[hh]]);
}
puts(" ");
return 0;
}