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 Go (1.14.1) (judge verdict: Accepted)

package main

import "fmt"

func main() {
	k, a := input()
	ans := run(k, a)
	output(ans)
}

func run(k int, a []int) int {
	town := 0
	// trajectory := []int{}
	trajectory := make(map[int]int)
	var begin, end int
	var ok bool
	var i int
	for i = 0; i < k; i++ {
		begin, ok = trajectory[town]
		// begin = firstAppearance(town, trajectory)
		if ok {
			end = i
			break
		}
		trajectory[town] = i
		// trajectory = append(trajectory, town)
		town = a[town]
	}
	if i == k {
		return town + 1
	}
	t := (k - begin) % (end - begin)
	// fmt.Println(begin, end)
	// fmt.Println(trajectory)
	arr := make([]int, end-begin, end-begin)
	for i, v := range trajectory {
		if begin <= v && v < end {
			arr[v-begin] = i
		}
	}
	// fmt.Println(arr)
	// arr := trajectory[begin:end]
	return arr[t] + 1
	// return -1
}

func firstAppearance(x int, t map[int]int) int {
	for i, v := range t {
		if x == v {
			return i
		}
	}
	return -1
}

func output(a int) {
	fmt.Println(a)
}

func input() (int, []int) {
	var n, k int
	fmt.Scan(&n, &k)
	a := make([]int, n, n)
	var t int
	for i := range a {
		fmt.Scan(&t)
		a[i] = t - 1
	}
	return k, a
}