#include <cstdio>
#include <set>
#include <algorithm>

using std::set;
using std::sort;

struct broj {
	broj() {
	}
	broj(int _b, int _n, int _p) : b(_b), n(_n), p(_p) {
	}
	
	int b, n, p;
};

struct cmp1 {
	bool operator()(const broj& b1, const broj& b2) const {
		return b1.b < b2.b;
	}
};

bool cmp2(const broj&, const broj&);

typedef set<broj, cmp1> bset;

const int MAXN = 1000;

int n;
bset s;
broj br[MAXN];

int main() {
	scanf("%d%*d", &n);
	
	for(int i = 0; i < n; ++i) {
		int tmp;
		scanf("%d", &tmp);
		
		bset::iterator it = s.find(broj(tmp, 0, 0));
		
		if(it != s.end()) {
			broj b = *it;
			s.erase(it);
			s.insert(broj(b.b, b.n + 1, b.p));
		}
		else
			s.insert(broj(tmp, 1, i));
	}
	
	int m = 0;
	for(bset::iterator it = s.begin(); it != s.end(); ++it, ++m)
		br[m] = *it;
	
	sort(br, br + m, cmp2);
	
	for(int i = 0; i < m; ++i)
		for(int j = 0; j < br[i].n; ++j) {
			printf("%d", br[i].b);
			
			if(i == m - 1 && j == br[i].n - 1)
				printf("\n");
			else
				printf(" ");
		}
	
	return 0;
}

bool cmp2(const broj& b1, const broj& b2) {
	if(b1.n == b2.n)
		return b1.p < b2.p;
	
	return b1.n > b2.n;
}
