#include <iostream>
#include <stdio.h>
#include <vector>
#include <limits>

#define MAXN 600000
#define MAX2N 2000000
//#define INT_MAX 2000000000

using namespace std;

int n,k,sr=-1;
int x[MAXN],r[MAXN],rl;
int s[MAX2N],l;
int ss[MAX2N];
vector <int> v;

void unos()
{
    scanf("%d %d",&n,&k);
    for(int i=0;i<n;i++)
        scanf("%d",&x[i]);
}

void ispiss()
{
    for(int i=0;i<2*l-1;i++)
        cout<<s[i]<<" ";
    cout<<endl;
}

void ispisv()
{
    for(int i=0;i<v.size();i++)
        cout<<v[i]<<" ";
    cout<<endl;
}

void napravi()
{
    int i;
    l=1;
    while(l<n)
        l*=2;
    //cout<<l<<endl;
    for(i=0;i<2*l;i++)
        s[i]=INT_MAX;
    //ispiss();
    for(i=l+n-2;i>=l-1;i--){
        s[i]=x[i-l+1];
        ss[i]=i-l+1;
    }
    for(;i>=0;i--){
        if(s[2*i+1]<=s[2*i+2]){
            s[i]=s[2*i+1];
            ss[i]=ss[2*i+1];
        }
        else
        {
            s[i]=s[2*i+2];
            ss[i]=ss[2*i+2];
        }
    }
}

int minimum(int a,int b,int poc,int kr,int i)
{
    if((kr==b&&poc==a)||i>=l-1)
        return ss[i];
    int middle=(poc+kr)/2,pot1,pot2;
    if(b<=middle)
        return minimum(a,b,poc,middle,2*i+1);
    else
        if(a>middle)
            return minimum(a,b,middle,kr,2*i+2);
        else
        {
            pot1=minimum(a,middle,poc,middle,2*i+1);
            pot2=minimum(middle,b,middle,kr,2*i+2);
            if(x[pot1]<=x[pot2])
                return pot1;
            else
                return pot2;
        }
}

void resenje(int a,int b)
{
    //cout<<a<<" "<<b<<endl;
    if(a+1==b)
    {
        int i;
        for(i=a;i<n-1;i++)
            if(x[i]>x[i+1])
                break;
        if(i!=n-1)
            sr=i;
        else
            sr=n;
        return;
    }
    int m;
    m=minimum(a,b-1,0,l-1,0);
    //cout<<m<<endl;
    if(m==a){
        resenje(a+1,min(b+1,n-1));
        return;
    }
    v.push_back(m+1);
    if(b>m-a)
        resenje(m,b-(m-a)+1);
}

void resi()
{
    napravi();
    //ispiss();
    resenje(0,k);
}

void ispisr()
{
    for(int i=0;i<rl;i++)
        printf("%d ",r[i]);
}

void ispis()
{
    int i;
    rl=0;
    for(i=0;i<v.size();i++){
        r[rl++]=x[v[i]-1];
    }
    if(v.size()>0)
        i=v[v.size()-1];
    else
        i=0;
    for(;i<n;i++)
        if(i!=sr)
            r[rl++]=x[i];
    ispisr();
}

int main()
{
    unos();
    resi();
    //ispisv();
    ispis();


    return 0;
}