#include <bits/stdc++.h>

using namespace std;

struct struk
{
    int vr;
    int poz;
};

int res[500010];
int a[500010];
int br = 0;
int maxEl = INT_MAX;
multiset<struk> stanje;
int dokle = -1;

inline bool operator<(const struk& prvi, const struk& drugi)
{
    /*if(prvi.poz <= dokle) return false;
    if(drugi.poz <= dokle) return false;*/
    return prvi.vr < drugi.vr;
}



void rek(int l, int d, int k)
{
    if(k == 0) return;
    int mini = maxEl;
    int ind = 0;
    for(int i = l; i <= d - k + 1; i++)
    {
        if(stanje.empty() == true)
        {
            struk pom;
            pom.vr = a[i];
            pom.poz = i;
            stanje.insert(pom);
            continue;
        }
        multiset<struk>::iterator it = stanje.begin();
        struk x = *it;
        if(a[i] < x.vr)
        {
            stanje.clear();
            //mini = a[i];
            ind = i;
        }
        struk pom;
        pom.vr = a[i];
        pom.poz = i;
        stanje.insert(pom);
    }
    while(true)
    {
        multiset<struk>::iterator it = stanje.begin();
        struk naj = *it;
        if(naj.poz > dokle)
        {
            res[br++] = naj.vr;
            dokle = naj.poz;
            stanje.erase(*it);
            break;
        }
        stanje.erase(*it);
    }
    rek(d - k + 2, d, k - 1);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, k;
    cin >> n >> k;
    for(int i = 0; i < n; i++)
        cin >> a[i];

    rek(0, n-1, n-k);
    for(int i = 0; i < n-k; i++) cout << res[i] << " ";

    return 0;
}