n,k = list(map(int, input().split()))

A = tuple(map(int,input().split()))



import sys



sys.setrecursionlimit(1000000000)

from collections import deque





seen = [0 for i in range(n)]



hist = deque([])  # 頂点の訪問履歴

pos = -1  # サイクルの1成分 -1はサイクル未発見





def dfs(x, p):  # pはxの親

    global pos  # global!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    seen[x] = 1

    hist.append(x)  # 訪れたらhistにappend

    if seen[A[x]-1] == 1:

        pos = A[x]-1

        return  # サイクルを発見したら、即すべてのdfsを終える

    # 残りはseen[x]=0のみ

    dfs(A[x]-1, x)

    if pos != -1: return  # 帰りがけ、サイクルが検出済みなら何もしない



    hist.pop()  # stackの末尾を消す

    # ループなく平和に終わったらpopできる

    return  # まあなくてもいいけどreturnは終了であることを強調





dfs(0, -1)



# この状態だと、サイクルに入る前に通った枝葉がhistに入ってる。

# 枝葉が終わったら、posからループの順番に頂点番号が入ってる。

cycle = []

while hist:

    qwe = hist.pop()

    cycle.append(qwe)

    if qwe == pos: break



roop = len(cycle)

sen = seen.count(1)



if k<=n:

    no = 0

    for i in range(k):

        no = A[no]-1

    print((no+1))

else:

    tmp = k-sen+roop

    tmp%=roop

    print((cycle[-tmp-1]+1))

n,k = list(map(int ,input().split()))

A = tuple(map(int, input().split()))

seen = [-1]*n

tmp = 0

count = 0



while True:

    tmp = A[tmp]-1

    count +=1

    if seen[tmp] != -1:

        seennum = seen.count(1)



        tm = tmp

        se = [-1]*n

        roopmem = []

        while True:



            if se[tm] != -1:

                roop = se.count(1)

                break

            else:

                roopmem.append(tm)

                se[tm] = 1

                tm = A[tm] - 1



        break

    else:

        seen[tmp] = 1



if k<=n:

    no = 0

    for i in range(k):

        no = A[no]-1

    print((no+1))

else:

    tmp = k-seennum

    tmp %= roop

    print((roopmem[tmp-1]+1))

n, k = list(map(int, input().split()))
A = tuple(map(int, input().split()))
import sys

sys.setrecursionlimit(1000000000)
from collections import deque

seen = [0 for i in range(n)]
hist = deque([])  # 頂点の訪問履歴
pos = -1  # サイクルの1成分 -1はサイクル未発見


def dfs(x, p):  # pはxの親
    global pos  # global!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    seen[x] = 1
    hist.append(x)  # 訪れたらhistにappend
    if seen[A[x] - 1] == 1:
        pos = A[x] - 1
        return  # サイクルを発見したら、即すべてのdfsを終える
    # 残りはseen[x]=0のみ
    dfs(A[x] - 1, x)
    if pos != -1:
        return  # 帰りがけ、サイクルが検出済みなら何もしない
    hist.pop()  # stackの末尾を消す
    # ループなく平和に終わったらpopできる
    return  # まあなくてもいいけどreturnは終了であることを強調


dfs(0, -1)
# この状態だと、サイクルに入る前に通った枝葉がhistに入ってる。
# 枝葉が終わったら、posからループの順番に頂点番号が入ってる。
cycle = []
while hist:
    qwe = hist.pop()
    cycle.append(qwe)
    if qwe == pos:
        break
roop = len(cycle)
sen = seen.count(1)
if k <= n:
    no = 0
    for i in range(k):
        no = A[no] - 1
    print((no + 1))
else:
    tmp = k - sen + roop
    tmp %= roop
    print((cycle[-tmp - 1] + 1))

n, k = list(map(int, input().split()))
A = tuple(map(int, input().split()))
seen = [-1] * n
tmp = 0
count = 0
while True:
    tmp = A[tmp] - 1
    count += 1
    if seen[tmp] != -1:
        seennum = seen.count(1)
        tm = tmp
        se = [-1] * n
        roopmem = []
        while True:
            if se[tm] != -1:
                roop = se.count(1)
                break
            else:
                roopmem.append(tm)
                se[tm] = 1
                tm = A[tm] - 1
        break
    else:
        seen[tmp] = 1
if k <= n:
    no = 0
    for i in range(k):
        no = A[no] - 1
    print((no + 1))
else:
    tmp = k - seennum
    tmp %= roop
    print((roopmem[tmp - 1] + 1))

-import sys - -sys.setrecursionlimit(1000000000) -from collections import deque - -seen = [0 for i in range(n)] -hist = deque([])  # 頂点の訪問履歴 -pos = -1  # サイクルの1成分 -1はサイクル未発見 - - -def dfs(x, p):  # pはxの親 -    global pos  # global!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -    seen[x] = 1 -    hist.append(x)  # 訪れたらhistにappend -    if seen[A[x] - 1] == 1: -        pos = A[x] - 1 -        return  # サイクルを発見したら、即すべてのdfsを終える -    # 残りはseen[x]=0のみ -    dfs(A[x] - 1, x) -    if pos != -1: -        return  # 帰りがけ、サイクルが検出済みなら何もしない -    hist.pop()  # stackの末尾を消す -    # ループなく平和に終わったらpopできる -    return  # まあなくてもいいけどreturnは終了であることを強調 - - -dfs(0, -1) -# この状態だと、サイクルに入る前に通った枝葉がhistに入ってる。 -# 枝葉が終わったら、posからループの順番に頂点番号が入ってる。 -cycle = [] -while hist: -    qwe = hist.pop() -    cycle.append(qwe) -    if qwe == pos: +seen = [-1] * n +tmp = 0 +count = 0 +while True: +    tmp = A[tmp] - 1 +    count += 1 +    if seen[tmp] != -1: +        seennum = seen.count(1) +        tm = tmp +        se = [-1] * n +        roopmem = [] +        while True: +            if se[tm] != -1: +                roop = se.count(1) +                break +            else: +                roopmem.append(tm) +                se[tm] = 1 +                tm = A[tm] - 1 -roop = len(cycle) -sen = seen.count(1) +    else: +        seen[tmp] = 1 -    tmp = k - sen + roop +    tmp = k - seennum -    print((cycle[-tmp - 1] + 1)) +    print((roopmem[tmp - 1] + 1))