#include <iostream>
#include<bits/stdc++.h>
#include <vector>
using namespace std;

int main() {
    // int a, b;
    // while (cin >> a >> b) { // 注意 while 处理多个 case
    //     cout << a + b << endl;
    // }
    deque<int> inc, dec;
    int n, k, ele;
    cin >> n >> k;
    vector<int> nums;
    for(int i=0;i<n;++i) {
        cin >> ele;
        // cout<<ele<<" ";
        nums.emplace_back(ele);
    }
    vector<int> resultMin(n-k+1),resultMax(n-k+1);

    // cout<<endl;
    auto getMinWindow = [&]() {
        // vector<int> result(n - k + 1);
        // int tmp = k;
        for (int i = 0; i < k; ++i) {
            // cout<<i<<endl;
            while (!inc.empty() && nums[inc.back()] >= nums[i])inc.pop_back();
            inc.emplace_back(i);
        }
        resultMin[0] = nums[inc.front()];
        for (int i = 1; i <= n - k; ++i) {
            while (!inc.empty() && inc.front() < i)inc.pop_front();
            while (!inc.empty() && nums[inc.back()] >= nums[i + k - 1])inc.pop_back();
            inc.emplace_back(i+k-1);
            resultMin[i] = nums[inc.front()];
        }
        // cout<<resultMin.size()<<endl;
        // return result;
        return;
    };
    auto getMaxWindow = [&]() {
        vector<int> result(n - k + 1);
        int tmp = k;
        for (int i = 0; i < k; ++i) {
            while (!dec.empty() && nums[dec.back()] <= nums[i])dec.pop_back();
            dec.emplace_back(i);
        }
        resultMax[0] = nums[dec.front()];
        for (int i = 1; i <= n - k; ++i) {
            while (!dec.empty() && dec.front() < i)dec.pop_front();
            while (!dec.empty() && nums[dec.back()] <= nums[i + k - 1])dec.pop_back();
            dec.emplace_back(i+k-1);
            resultMax[i] = nums[dec.front()];
        }
        // return result;
        return;
    };
    getMinWindow();
    getMaxWindow();
    for(auto i:resultMin)printf("%d ",i);
    printf("\n");
    for(auto i:resultMax)printf("%d ",i);
    return 0;
}
// 64 位输出请用 printf("%lld")