##单调队列
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n,k;
int a[N] , q[N];//a[N]是我们储存数据的数组,q[N]是一个队列用于存储数组的下标的队列
int main()
{
cin>>n>>k;
for (int i = 0 ; i < n ; i ++) cin>>a[i];
int hh = 0 , tt = -1;//队列储存的是数组的下标
for (int i = 0 ; i < n ; i ++)//队头就是最小元素,单调递增的队列
{
if (hh <= tt && i - k + 1 > q[hh]) hh ++;//判断队头是否应该划出
while (a[q[tt]] > a[i] && hh <= tt) tt --;
q[++ tt] = i;
if ((i - k + 1) >= 0) cout<<a[q[hh]]<<' ';
}
cout<<endl;
hh = 0 , tt = -1;
for (int i = 0 ; i < n ; i ++)
{
if (hh <= tt && i - k + 1 > q[hh]) hh ++;
while (a[q[tt]] < a[i] && hh <= tt) tt --;
q[++ tt] = i;
if ((i - k + 1) >= 0) cout<<a[q[hh]]<<' ';
}
return 0;
}