#include <bits/stdc++.h>
#define MAXN 1000005
using namespace std;

multiset<int> m;
set<int> s[MAXN];
int a[MAXN],conv[MAXN];
pair<int,int> p[MAXN];
vector<int> sol;
vector<int> res;

int main()
{ int n,k,i,o,num=0;
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
{
    scanf("%d",&a[i]);
    
    if(a[i]==1 || a[i]==0) num++;

    p[i].first=a[i]; p[i].second=i;
}

sort(p,p+n);

int cnt=1;

a[ p[0].second ]=1;

for(i=1;i<n;i++)
{
    if(p[i-1].first!=p[i].first)
    {
        cnt++;
    }

    a[ p[i].second ]=cnt;
}

for(i=0;i<n;i++)
{
    conv[ a[ p[i].second ] ]=p[i].first;

    p[i].first=a[ p[i].second ];
}

for(i=0;i<n;i++)
{
    s[ p[i].first ].insert(p[i].second);
}

for(i=0;i<=k;i++) m.insert(a[i]);


int u=k;
o=k;
i=0;
int now=0;
while(now<n && k>0)
{

    multiset<int>::iterator it;

    it=m.begin();

    int t=*it;

    sol.push_back(t);

    set<int>::iterator it1;

    it1=s[t].begin();

    k-=(*it1-now);

    for(i=now;i<=*it1;i++)
    {
        m.erase(m.find(a[i]));

        s[ a[i] ].erase( s[ a[i] ].find(i) );
    }


    now=*it1+1;

    u++;
    if(u<n) m.insert(a[u]);

}
k=max(0,k);
int tmp=sol.size();
int br=0;
tmp=min(tmp,n-o);
for(i=0;i<tmp;i++) { printf("%d ",conv[ sol[i] ]); br++; }
tmp=n-o-br-1;
u=min(u,tmp);
for(i=u;i<n;i++) { printf("%d ",conv[ a[i] ]); br++; if(br==(n-o)) break; }

    return 0;
}