#include<bits/stdc++.h>
using namespace std;
int n,k;
int nums[1000010] = {0};
int main()
{
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin>>n>>k;
// 下面求最小值
int cnt = 0;
int res[1000010] = {0};
deque<int> q; // 双端队列
for(int i=0;i<n;++i)
{
// 输入数据
cin>>nums[i];
// 第一步:入。
// 将nums[i]存入队列中,存入前进行下列操作,去除冗余元素
while(!q.empty() && nums[i] < nums[q.back()]){
q.pop_back();
}
q.push_back(i);
// 第二步:出。
// 将超出滑动窗口范围的数删掉
if(i - q.front() + 1 > k){
q.pop_front();
}
// 第三步:记录答案。
if(i + 1 >= k){
res[cnt++] = nums[q.front()];
}
}
for(int i=0;i<cnt;++i) cout<<res[i]<<' ';
cout<<'\n';
// 下面求最大值
cnt = 0;
q.clear();
for(int i=0;i<n;++i)
{
while(!q.empty() && nums[i] > nums[q.back()]){
q.pop_back();
}
q.push_back(i);
if(i - q.front() + 1 > k){
q.pop_front();
}
if(i + 1 >= k){
res[cnt++] = nums[q.front()];
}
}
for(int i=0;i<cnt;++i) cout<<res[i]<<' ';
}