We have a sequence of N \times K integers: X=(X_0,X_1,\cdots,X_{N \times K-1}). Its elements are represented by another sequence of N integers: A=(A_0,A_1,\cdots,A_{N-1}). For each pair i, j (0 \leq i \leq K-1,\ 0 \leq j \leq N-1), X_{i \times N + j}=A_j holds.

Snuke has an integer sequence s, which is initially empty. For each i=0,1,2,\cdots,N \times K-1, in this order, he will perform the following operation:

* If s does not contain X_i: add X_i to the end of s.
* If s does contain X_i: repeatedly delete the element at the end of s until s no longer contains X_i. Note that, in this case, we do not add X_i to the end of s.



Find the elements of s after Snuke finished the operations.

Constraints

* 1 \leq N \leq 2 \times 10^5
* 1 \leq K \leq 10^{12}
* 1 \leq A_i \leq 2 \times 10^5
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N K
A_0 A_1 \cdots A_{N-1}


Output

Print the elements of s after Snuke finished the operations, in order from beginning to end, with spaces in between.

Examples

Input

3 2
1 2 3


Output

2 3


Input

5 10
1 2 3 2 3


Output

3


Input

6 1000000000000
1 1 2 2 3 3


Output




Input

11 97
3 1 4 1 5 9 2 6 5 3 5


Output

9 2 6
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll inf=1e18;
const int MAXN=4e5+5;
int a[MAXN];
ll g[MAXN][65];
int pos[MAXN];
ll n,m;
int main(){
	scanf("%lld%lld",&n,&m);
	for (int i=0;i<n;i++) scanf("%d",&a[i]),a[i+n]=a[i];
	for (int i=0;i<2*n;i++) pos[i]=-1;
	for (int i=0;i<2*n;i++){
//		if (i==5) cout<<pos[a[i]]<<" "<<a[i]<<endl;
		if (pos[a[i]]!=-1){
//			cout<<i<<"-<"<<pos[a[i]]<<" "<<a[i]<<endl;
			g[pos[a[i]]][0]=i-pos[a[i]]+1;
			pos[a[i]]=i;
		}
		else pos[a[i]]=i;
	}
	for (int i=0;i<n;i++){
		if (g[i][0]==0) g[i][0]=n*m+1;
//		cout<<i<<" "<<g[i][0]<<endl;
	}
	for (int k=1;k<=60;k++){
		for (int i=0;i<n;i++){
			g[i][k]=min(n*m+1,g[i][k-1]+g[(i+g[i][k-1])%n][k-1]);
		}
	}
	ll now=0;
	for (int k=60;k>=0;k--){
//		cout<<now<<" "<<g[now%n][k]<<endl;
		if (now+g[now%n][k]<n*m) now+=g[now%n][k];
//		cout<<k<<" "<<now<<endl;
	}
//	cout<<endl<<now<<endl;
	for (ll i=now;i<n*m;i++){
//		cout<<i<<endl;
		ll x=i%n;
		if (x+g[x][0]<=n) i=i+g[x][0]-1;
		else printf("%d ",a[x]);
	}
	printf("\n");
	return 0;
}
