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

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;
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);
}

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


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

    it=m.begin();

    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(i);
    }

    k-=(*it1-now);

    //cout << *it1 << " " << k << endl;

    //cout << t<< " " << *it1 << " " << now << endl;

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

    /*for(it2=m.begin();it2!=m.end();*it2++)
{
    cout << *it2 << " ";
} cout << k;
cout << endl;*/
}
k=max(0,k);
for(i=0;i<sol.size();i++) printf("%d ",conv[ sol[i] ]);
for(i=u;i<n-k;i++) printf("%d ",conv[ a[i] ]);
//for(i=0;i<res.size()-k;i++) printf("%d ",res[i]);
    return 0;
}