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 C# (.NET Core 3.1.201) (judge verdict: Wrong Answer)

using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Text;


class Program
{
    static void Main(string[] args)
    {
        // 入力
        //var s = Console.ReadLine();
        //var n = long.Parse(Console.ReadLine());
        long[] input = Console.ReadLine().Split().Select(long.Parse).ToArray();
        long n = input[0];
        long k = input[1];
        long[] a = Console.ReadLine().Split().Select(long.Parse).ToArray();

        bool[] visited = new bool[n];
        var list = new List<long>();
        long i = 0;
        while (true)
        {
            if (visited[i])
            {
                list.Add(i);
                break;
            }
            else
            {
                visited[i] = true;
                list.Add(i);
                i = a[i] - 1;
            }
        }

        int loopstart = 1;
        int loopend = list.Count;
        for (int t = 0; t < list.Count; t++)
        {
            if (list[t] == list[loopend - 1])
            {
                loopstart = t + 1;
                break;
            }
        }

        long ans = 0;
        if (k < list.Count)
        {
            ans = list[(int)(k - 1)];
        }
        else
        {
            long tmp = k % (loopend - loopstart);
            long tmp2 = 0;
            for (int t = loopstart - 1; t < loopend - 1; t++)
            {
                if (tmp == t % (loopend - loopstart))
                {
                    tmp2 = t;
                    break;
                }
            }
            ans = list[(int)tmp2] + 1;
        }


        // 出力
        Console.WriteLine(ans);
    }
}