/*
裸地单调队列..
第一次写 写的好丑....
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000010
using namespace std;
int n,k,x,a[maxn],t[maxn],q[maxn],head=,tail;
int init()
{
int f=,x=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int main()
{
n=init();k=init();
for(int i=;i<=n;i++)a[i]=init();
for(int i=;i<=k-;i++)
{
x=a[i];
while(x<q[tail]&&tail>=head)tail--;
q[++tail]=x;t[tail]=i;
if(i-t[head]+>k)head++;
}
for(int i=k;i<=n;i++)
{
x=a[i];
while(x<q[tail]&&tail>=head)tail--;
q[++tail]=x;t[tail]=i;
if(i-t[head]+>k)head++;
printf("%d ",q[head]);
}
tail=;head=;printf("\n");
for(int i=;i<=k-;i++)
{
x=a[i];
while(x>q[tail]&&tail>=head)tail--;
q[++tail]=x;t[tail]=i;
if(i-t[head]+>k)head++;
}
for(int i=k;i<=n;i++)
{
x=a[i];
while(x>q[tail]&&tail>=head)tail--;
q[++tail]=x;t[tail]=i;
if(i-t[head]+>k)head++;
printf("%d ",q[head]);
}
return ;
}