#include <bits/stdc++.h>
#define maxN 200005

using namespace std;

vector <int> v,u;
int n,i,j,t,k,a[maxN],ne[200005][102];

int main()
{
    std::ios_base::sync_with_stdio(0);
    cin>>n>>k;
    for(i=0;i<n;i++){
        cin>>a[i];
        v.push_back(a[i]);
    }
    sort(v.begin(),v.end());
    for(i=0;i<v.size()-1;i++){
        if(v[i]!=v[i+1]) u.push_back(v[i]);
    }
    u.push_back(v.back());
    v.clear();
    for(i=0;i<n;i++){
        int tmp=lower_bound(u.begin(),u.end(),a[i])-u.begin();
        a[i]=tmp;
    }
    if(u.size()>100){
    for(i=0;i<n;i++){
        for(j=0;j<u.size();j++){
            bool b=false;
            for(t=i;t<n;t++){
                if(a[t]==j && n-t-1>=n-k-v.size()-1) {v.push_back(j); b=true; break;}
            }
            if(b) break;
        }
        i=t;
    }
    }
    else{
        for(i=0;i<u.size();i++){
            ne[n][i]=-1;
            for(j=n-1;j>=0;j--){
                if(a[j]==i) ne[j][i]=j;
                else ne[j][i]=ne[j+1][i];
            }
        }
        for(i=0;i<n;i++){
        for(j=0;j<u.size();j++){
            t=ne[i][j];
            if(t==-1) continue;
            if(a[t]==j && n-t-1>=n-k-v.size()-1) {v.push_back(j); break;}
        }
        if(t==-1) break;
        i=t;
    }
    }
    for(i=0;i<v.size();i++) cout<<u[v[i]]<<" ";
    return 0;
}