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
#from collections import deque,defaultdict
printn = lambda x: print(x,end='')
inn = lambda : int(input())
inl   = lambda: list(map(int, input().split()))
inm   = lambda:      map(int, input().split())
ins = lambda : input().strip()
DBG = True # and False
BIG = 10**18
R = 10**9 + 7
#R = 998244353

def ddprint(x):
  if DBG:
    print(x)

n,k = inm()
a = inl()

# nxt loc for each val
prev = [-1]*200001
nxt = [-1]*(n+1)
for i in range(2*n):
    v = a[i%n]
    if 0<=prev[v]<n:
        nxt[prev[v]] = (i+1)%n
    prev[v] = i
#ddprint("nxt")
#ddprint(nxt)

# find loop
last = [-1]*(2*n)
cur = 0
cyc = 0
dolast = False
for i in range(2*n):
    last[cur] = cyc
    nx = nxt[cur]
    if nx<cur+2:
        if cyc==k-1:
            dolast = True
            break
        cyc += 1 + (1 if cur==n-1 and nx==0 else 0)
    cur = nx
    if last[nx]>=0:
        break
#ddprint(f"1 {cyc=} {cur=} last {last[nx]}")

if not dolast:
    # loop: last[cur]*n + cur .. cyc*n + cur
    d = cyc-last[nx]
    cyc += ((k-1-cyc)//d)*d
    #ddprint(f"2 {cyc=} {cur=} {d=} last {last[nx]}")

    # cyc*n + cur
    while cyc<k:
        nx = nxt[cur]
        if nx<cur+2:
            if cyc==k-1:
                break
            cyc += 1 + (1 if cur==n-1 and nx==0 else 0)
        cur = nx
#ddprint(f"3 {cyc=} {cur=}")

# last one mile
last = [-1]*200001
b = [] #[a[cur]]
#last[a[cur]] = cur
if cyc<k:
  for i in range(cur,n):
    j = last[a[i]]
    if j>=0:
        while b[-1]!=a[i]:
            last[b[-1]] = -1
            b.pop()
        last[b[-1]] = -1
        b.pop()
    else:
        b.append(a[i])
        last[a[i]] = i

# output
pad = ''
for x in b:
    printn(pad+str(x))
    pad = ' '
print('')
