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: Wrong Answer)

package main

import (
	"fmt"
	"strconv"

	// Reader
	"bufio"
	"os"
	"strings"
)

const BUFF_LIMIT = 1000

func main() {
	var i Input
	i.Init(BUFF_LIMIT) 
	d := i.NextLine()

	townCount, _ := strconv.Atoi(d[0])
	numK, _ := strconv.Atoi(d[1])
	
	tl := i.NextLine()
	lines := make([]int, townCount)
	for n := 0; n < townCount; n++ {
		ti, _ := strconv.Atoi(tl[n])
		lines[n] = ti 
	}

	path, before, loop := parseLines(lines)
	
	loopPos := (numK - before) % loop
	townPos := path[before + loopPos]

	fmt.Printf("%d \n", townPos + 1)
}

func parseLines(lines []int) ([]int, int, int) {
	var path []int 
	from := 0
	path = append(path, 0)
	for {
		to := lines[from] - 1
		pos := contains(path, to)
		if pos == -1 {
			// 無いとき
			path = append(path, to)
			from = to
			continue
		}

		// ある時 (どこかでloop してる
		beforeCount := pos
		loopCount := len(path) - pos
		return path, beforeCount, loopCount
	}
}

// Checker
func contains(s []int, e int) int {
	for k, v := range s {
		if e == v {
			return k
		}
	}
	return -1
}

// InputReader
type Input struct {
	limit int
	reader *bufio.Reader
}

func (i *Input) Init(l int) {
	i.limit = l
	i.reader = bufio.NewReaderSize(os.Stdin, i.limit)
}

func (i *Input) NextLine() []string {
	return i.parseLine(i.readLine())
}

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

func (i *Input) parseLine(s string) []string {
	slice := strings.Split(s, " ")
	return slice
}