#include <cstdio>
const int MAXN = 1000000 + 123;
struct people
{
int id, val;
people(int x, int y): id(x), val(y) {}
people() {}
} q[MAXN];
int a[MAXN];
int da[MAXN], db[MAXN];
int main()
{
int n, k;
while(scanf("%d%d", &n, &k) != EOF)
{
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
//求大值
int head = 0, tail = -1 , leave = 0;
int ka = 0;
for(int i = 0; i < k; i++)
{
while(tail >= head && q[tail].val <= a[i]) tail--;
people now(++ka, a[i]);
q[++tail] = now;
}
for(int i = k; i < n; i++)
{
while(tail >= head && q[head].id <= leave) head++;
da[i - k] = q[head].val;
leave++;
while(tail >= head && q[tail].val <= a[i]) tail--;
people now(++ka, a[i]);
q[++tail] = now;
}
while(tail >= head && q[head].id <= leave) head++;
da[n - k] = q[head].val;
//求小值
head = 0, tail = -1 , leave = 0;
ka = 0;
for(int i = 0; i < k; i++)
{
while(tail >= head && q[tail].val >= a[i]) tail--;
people now(++ka, a[i]);
q[++tail] = now;
}
for(int i = k; i < n; i++)
{
while(tail >= head && q[head].id <= leave) head++;
db[i - k] = q[head].val;
leave++;
while(tail >= head && q[tail].val >= a[i]) tail--;
people now(++ka, a[i]);
q[++tail] = now;
}
while(tail >= head && q[head].id <= leave) head++;
db[n - k] = q[head].val;
for(int i = 0; i < n - k; i++) printf("%d ", db[i]);
printf("%d\n", db[n - k]);
for(int i = 0; i < n - k; i++) printf("%d ", da[i]);
printf("%d\n", da[n - k]);
}
return 0;
}