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: Time Limit Exceeded)

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)
var rdr = bufio.NewReaderSize(os.Stdin, 1000000)

// https://atcoder.jp/contests/abc167/tasks/abc167_d
var hashMap map[int]int
var history map[int]int
var muraCount int
func main() {

	firstLine := strings.Split(readLine(), " ")
	secondLine := strings.Split(readLine(), " ")

	// line 1 N札 M個 目標値
	// line over 2 値段 アルゴ理解度......
	muraCount, _ = strconv.Atoi(firstLine[0])
	jumpNum, _ := strconv.Atoi(firstLine[1])

	hashMap = make(map[int]int, muraCount)
	history = make(map[int]int, muraCount)
	for i, v := range secondLine {
		n, _ := strconv.Atoi(v)
		hashMap[i+1] = n
	}

	jump(jumpNum, 1, 0)

}

func jump(k int, index int, cnt int) {

	if cnt == k {
		fmt.Println(index)
		os.Exit(0)
	}

	for i, v := range history {
		if v == index {
			// ループしたことになる 現在 cnt - i 分移動すると また香り高い街に移動する。
			// 残りの移動量は k - cnt となり、 (k-cnt) % (cnt - i) 分移動すれば答えとなる。
			nokori := (k - cnt) % (cnt - i)
			history = make(map[int]int, muraCount)
			jump(nokori, index, 0)
		}
	}
	history[cnt] = index

	jump(k, hashMap[index], cnt+1)

}

func readLine() string {
	buf := make([]byte, 0, 1000000)
	for {
		l, p, e := rdr.ReadLine()
		if e != nil {
			panic(e)
		}
		buf = append(buf, l...)
		if !p {
			break
		}
	}
	return string(buf)
}