Problem:
Score: 400 points

Problem Statement

The Kingdom of Takahashi has N towns, numbered 1 through N.

There is one teleporter in each town. The teleporter in Town i (1 \leq i \leq N) sends you to Town A_i.

Takahashi, the king, loves the positive integer K. The selfish king wonders what town he will be in if he starts at Town 1 and uses a teleporter exactly K times from there.

Help the king by writing a program that answers this question.

Constraints

2 \leq N \leq 2 \times 10^5

1 \leq A_i \leq N

1 \leq K \leq 10^{18}

Input

Input is given from Standard Input in the following format:

N K
A_1 A_2 \dots A_N

Output

Print the integer representing the town the king will be in if he starts at Town 1 and uses a teleporter exactly K times from there.

Sample Input 1

4 5
3 2 4 1

Sample Output 1

4

If we start at Town 1 and use the teleporter 5 times, our travel will be as follows: 1 \to 3 \to 4 \to 1 \to 3 \to 4.

Sample Input 2

6 727202214173249351
6 5 2 5 3 2

Sample Output 2

2

Solution in Java (OpenJDK 11.0.6) (judge verdict: Runtime Error)

import java.util.*;

public class Main{

    Scanner sc = new Scanner(System.in);

    public static void main(String[] args){
        new Main().run();
    }

    void run() {

        int n = sc.nextInt();
        long k = sc.nextLong();
        int[] arr = new int[n];
        for (int i=0; i<n; i++) arr[i] = sc.nextInt() - 1;

        int[] cnt = new int[n];
        cnt[0] = 1;

        int start = Integer.MAX_VALUE;

        int idx = arr[0];
        cnt[idx]++;
        outer:
        for (int i=1; i<n; i++) {
            int tmp = arr[idx];
            cnt[tmp]++;
            if (cnt[tmp] == 2) {
                start = tmp;
                break outer;
            }
            idx = tmp;
        }


        int before = 0;
        idx = arr[0];


        if (start != 0) {
            before++;
            out:
            for (int i=1; i<n; i++) {
                int tmp = arr[idx];
                before++;
                idx = tmp;
                if (tmp == start) break out;
            }

        }

        int circle = 0;
        idx = arr[0];

        if (start == 0) {
            circle++;
            for (int i=1; i<n; i++) {
                int tmp = arr[idx];
                circle++;
                if (tmp == start) break;
                idx = tmp;
            }
        } else {
            for (int i=1; i<n; i++) {
                int tmp = arr[idx];
                idx = tmp;
                if (tmp == start) {
                    circle++;
                    tmp = arr[tmp];
                    while (tmp != start) {
                        circle++;
                        tmp = arr[tmp];
                    }
                    break;
                }
            }
        }

//        System.out.println(circle);

        long remain = (k - before) % circle;
        
        if (circle == 0)

//        System.out.println(remain);
//        System.out.println(before);
//        System.out.println(start);


        idx = arr[start];
        if (remain == 0) {
            System.out.println(start + 1);
        } else {
            for (int i=0; i<remain-1; i++) {
                int tmp = arr[idx];
                idx = tmp;
                System.out.println(idx + 1);
            }

        }






    }


}