#include<iostream>
#include<cstdio>
#include<ctime>
#include<cmath>
#include <vector>
#include <utility>
#include <cstring>
#include<algorithm>

using namespace std;

struct sort_pred {
    bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
        return left.first > right.first;
    }
};

int loc(int x, int b[], int razl){
    for(int i=0; i<razl; i++){
            if(b[i]==x) return i;
            }}
    


int main(){
    vector<pair<int, int> > vektor;
    int n, c, razl=0, x=0;
    scanf("%d %d", &n, &c);
    int niz[n];
    for(int i=0; i<n; i++) scanf("%d", &niz[i]);
    for(int j=1; j<=c; j++){
            int brojac=0;
            for(int i=0; i<n; i++)     if (niz[i]==j) brojac++;
            if(brojac){
                       razl++;
                       pair<int,int> par=make_pair(brojac, j);
                       vektor.push_back(par);
                       }
                       }
   int b[razl];
  memset(b, 0, sizeof(b));
    for(int i=0; i<n; i++){
            int r=0;
            for(int j=0; j<x; j++){
                    if(niz[i]==b[j]) r=1;
                    }
            if(r==0) {
                         b[x]=niz[i];
                         x++;
                         }
                         }
    sort(vektor.begin(), vektor.end(), sort_pred());
    for(int i=0; i<razl-1;i++){
            if(vektor[i].first==vektor[i+1].first) if(loc(vektor[i].second, b, razl)>loc(vektor[i+1].second, b, razl)) swap(vektor[i], vektor[i+1]);
            }
        
    for(int i=0; i<razl; i++){
            for(int j=vektor.front().first; j>0; j--) printf("%d ", vektor.front().second);
            vector<pair<int, int> >::iterator It;
            It = vektor.begin();
            vektor.erase( It );

            }
            
cout<<endl;


//system("pause");
return 0;
}
