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: Accepted)

import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.HashMap;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        Scanner in = new Scanner(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Teleporter solver = new Teleporter();
        solver.solve(1, in, out);
        out.close();
    }

    static class Teleporter {
        public void solve(int testNumber, Scanner in, PrintWriter out) {
            int n = in.nextInt();
            long k = in.nextLong();

            HashMap<Integer, Integer> map = new HashMap<>();
            int[] circle = new int[n + 1];

            for (int i = 1; i <= n; i++) {
                int t = in.nextInt();
                map.put(i, t);
            }

            Integer next = 1;
            circle[1]++;

            int close_start;
            while (true) {
                next = map.get(next);
                if (circle[next] == 3) {
                    close_start = next;
                    break;
                }
                circle[next]++;
            }

            int closed_step = 1;
            int tmp_close = map.get(close_start);
            while (tmp_close != close_start) {
                tmp_close = map.get(tmp_close);
                closed_step++;
            }

            long up_steps = 1;
            next = map.get(1);

            while (true) {
                if (next == close_start || up_steps >= k) {
                    break;
                }
                next = map.get(next);
                up_steps++;
            }

            long loop_num = (k - up_steps) % closed_step;
            for (int i = 0; i < loop_num; i++) {
                next = map.get(next);
            }
            out.append(String.valueOf(next));
        }

    }
}