Buggy python submission (verdict: Time Limit Exceeded):
import numpy as np
N, K = map(int, input().split())
A = list(map(lambda s: int(s)-1, input().split()))

n = 0
visit = [0]
for _ in range(K):
    n = A[n]
    if n not in visit:
        visit += [n]
    else:
        loop_start = visit.index(n)
        loop_length = len(visit) - loop_start
        print(visit[loop_start + ((K-loop_start) % loop_length)]+1)
        break
else:
    print(visit[-1]+1)


Fixed submission:
N, K = map(int, input().split())
A = list(map(lambda s: int(s)-1, input().split()))

n = 0
visit = {0}
ls = [0]
for _ in range(K):
    n = A[n]
    if n not in visit:
        visit.add(n)
        ls += [n]
    else:
        loop_start = 0
        loop_length = 0
        flag = False
        m = 0
        for _ in range(N):
            if n == m:
                if flag:
                    break
                else:
                    flag = True
            if flag:
                loop_length += 1
            else:
                loop_start += 1
            m = A[m]

        print(ls[loop_start + ((K-loop_start) % loop_length)]+1)
        break
else:
    print(n+1)

Buggy python submission (verdict: Time Limit Exceeded):
N, K = map(int, input().split())
A = list(map(int, input().split()))

n = 1
visit = [1]
for i in range(K):
    n = A[n-1]
    if n in visit:
        loop = [n]
        m = n
        while True:
            m = A[m-1]
            if m == n:
                print(loop[(K-len(visit)+1)%len(loop)-1])
                break
            loop += [m]
        break
    visit += [n]
else:
    print(visit[K])
    

Fixed submission:
N, K = map(int, input().split())
A = list(map(lambda s: int(s)-1, input().split()))

n = 0
visit = {0}
ls = [0]
for _ in range(K):
    n = A[n]
    if n not in visit:
        visit.add(n)
        ls += [n]
    else:
        loop_start = 0
        loop_length = 0
        flag = False
        m = 0
        for _ in range(N):
            if n == m:
                if flag:
                    break
                else:
                    flag = True
            if flag:
                loop_length += 1
            else:
                loop_start += 1
            m = A[m]

        print(ls[loop_start + ((K-loop_start) % loop_length)]+1)
        break
else:
    print(n+1)

Buggy python submission (verdict: Time Limit Exceeded):
N, K = map(int, input().split())
A = list(map(int, input().split()))

n = 1
ls = [1]
lps = 0
lpn = 0
for i in range(K):
    n = A[n-1]
    ls += [n]
    if A[n-1] in ls:
        lps = ls.index(A[n-1])
        lpn = i+2-lps
        break
if lpn != 0:
    print(ls[lps:][(K-lps)%lpn])
else:
    print(ls[lps:][K])

Fixed submission:
N, K = map(int, input().split())
A = list(map(lambda s: int(s)-1, input().split()))

n = 0
visit = {0}
ls = [0]
for _ in range(K):
    n = A[n]
    if n not in visit:
        visit.add(n)
        ls += [n]
    else:
        loop_start = 0
        loop_length = 0
        flag = False
        m = 0
        for _ in range(N):
            if n == m:
                if flag:
                    break
                else:
                    flag = True
            if flag:
                loop_length += 1
            else:
                loop_start += 1
            m = A[m]

        print(ls[loop_start + ((K-loop_start) % loop_length)]+1)
        break
else:
    print(n+1)

Buggy python submission (verdict: Runtime Error):
N, K = map(int, input().split())
A = list(map(int, input().split()))

n = 1
ls = [1]
lps = 0
lpn = 0
for i in range(K):
    n = A[n-1]
    ls += [n]
    if A[n-1] in ls:
        lps = ls.index(A[n-1])
        lpn = i+2-lps
        break

print(ls[lps:][(K-lps)%lpn])

Fixed submission:
N, K = map(int, input().split())
A = list(map(lambda s: int(s)-1, input().split()))

n = 0
visit = {0}
ls = [0]
for _ in range(K):
    n = A[n]
    if n not in visit:
        visit.add(n)
        ls += [n]
    else:
        loop_start = 0
        loop_length = 0
        flag = False
        m = 0
        for _ in range(N):
            if n == m:
                if flag:
                    break
                else:
                    flag = True
            if flag:
                loop_length += 1
            else:
                loop_start += 1
            m = A[m]

        print(ls[loop_start + ((K-loop_start) % loop_length)]+1)
        break
else:
    print(n+1)