#define y1 askjdkasldjlkasd
#include <bits/stdc++.h>
#undef y1

using namespace std;

#define pb push_back
#define mp make_pair
#define fi(a, b) for(int i=a; i<=b; i++)
#define fj(a, b) for(int j=a; j<=b; j++)
#define fo(a, b) for(int o=a; o<=b; o++)
#define fdi(a, b) for(int i=a; i>=b; i--)
#define fdj(a, b) for(int j=a; j>=b; j--)
#define fdo(a, b) for(int o=a; o>=b; o--)
#define sz(x) (int)x.size()

typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;
typedef pair<ll, ll> pll;
typedef vector<pll> vpll;
typedef vector<ll> vll;

#ifdef LOCAL
#define err(...) fprintf(stderr, __VA_ARGS__)
#else
#define err(...) while (0)
#endif

double START_TIME;

void exit() {
#ifdef LOCAL	
	cerr << "TIME: " << setprecision(5) << fixed << (clock() - START_TIME) / CLOCKS_PER_SEC << endl;
#endif	
	exit(0);
}

template<typename A, typename B>
ostream& operator<<(ostream& os, pair<A, B> p) {
	os << "(" << p.first << ", " << p.second << ")";
	return os;
}

template<typename T>
ostream& operator<<(ostream& os, vector<T> v) {
	fi(0, sz(v) - 1) {
		os << v[i] << " ";
	}
	return os;
}

template<typename T>
ostream& operator<<(ostream& os, set<T> t) {
	for (auto z : t) {
		os << z << " ";
	}
	return os;
}

template<typename T1, typename T2>
ostream& operator<<(ostream& os, map<T1, T2> t) {
	cerr << endl;
	for (auto z : t) {
		os << "\t" << z.first << " -> " << z.second << endl;
	}
	return os;
}

#ifdef LOCAL
#define dbg(x) {cerr << __LINE__ << "\t" << #x << ": " << x << endl;}
#define dbg0(x, n) {cerr << __LINE__ << "\t" << #x << ": "; for (int ABC = 0; ABC < n; ABC++) cerr << x[ABC] << ' '; cerr << endl;}
#else
#define dbg(x) while(0){}
#define dbg0(x, n) while(0){}
#endif

#ifdef LOCAL
#define ass(x) if (!(x)) { cerr << __LINE__ << "\tassertion failed: " << #x << endl, abort(); }
#else
#define ass(x) assert(x)
#endif

///////////////////////////////////////////////////

const int MAX = 2e5 + 41;
int n;
ll k;
int a[MAX];

vi getsuf(int x) {
	vi cnt(MAX, 0);
	vi res;
	fi(x, n - 1) {
		bool f = true;
		while (cnt[a[i]] > 0) {
			f = false;
			cnt[res.back()]--;
			res.pop_back();
		}
		if (f) {
			res.pb(a[i]);
			cnt[a[i]]++;
		}
	}
	return res;
}

int nxt[MAX];
int fp[MAX];
int lp[MAX];
int nxtsuf[MAX];

void solve () {	
	memset(nxt, -1, sizeof(nxt));
	memset(lp, -1, sizeof(lp));
	fdi(n - 1, 0) fp[a[i]] = i;
	fdi(n - 1, 0) {
		nxt[i] = lp[a[i]];
		lp[a[i]] = i;
	}
	nxtsuf[n] = 0;	
	fdi(n - 1, 0) {
		if (nxt[i] == -1) {
		  nxtsuf[i] = fp[a[i]] + 1;
		} else {
			if (nxt[i] == n - 1) {
				nxtsuf[i] = 0;
			} else {
				nxtsuf[i] = nxtsuf[nxt[i] + 1];
			}
		}
	}	

	vi order;
	vi was(n + 1, 0);
	int x = 0;
	while (!was[x]) {
		order.pb(x);
		was[x] = 1;
		x = nxtsuf[x];
	}	
	vi cycle, path;	
	while (sz(order)) {
		int ver = order.back();
		cycle.pb(ver);
		order.pop_back();		
		if (ver == x) break;
	}	
	path = order;
	reverse(cycle.begin(), cycle.end());
	int anssuf = -1;
	if (k <= sz(path)) {
		anssuf = path[k - 1];
	} else {
		ll kk = k - sz(path);
		int pos = (kk - 1) % sz(cycle);
		anssuf = cycle[pos];
	}	
	dbg(anssuf);
	vi resp = getsuf(anssuf);
	for (int x : resp) {
		printf("%d ", x);
	}
}

int main() {
#ifdef LOCAL
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	START_TIME = (double)clock();
#endif
	
	scanf("%d %lld", &n, &k);
	fi(0, n - 1) scanf("%d", &a[i]);
	solve();

	exit();
	return 0;
}





Measured memory_bytes: 8820