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

const int inf=1e9+7;

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

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

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

sort(p,p+n);

int cnt=1;

a[ p[0].second ]=1;
v.push_back(1);

for(i=1;i<n;i++)
{
    if(p[i-1].first!=p[i].first)
    {
        cnt++;
        v.push_back(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);
    s[p[i].first ].insert(inf);
}

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


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

    it=m.begin();
    if(*it!=inf)
    {
        int t=*it;

        sol.push_back(t);

        set<int>:: iterator it1;

        it1=s[t].begin();

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

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

    k-=(*it1-now);

    now=*it1+1;
    }
    u++;
    if(u<n) { m.insert(a[u]); m.insert(inf);}

}
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++; }
for(i=u;i<n;i++) { printf("%d ",conv[ a[i] ]); br++; if(br==(n-o)) break; }
    return 0;
}