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 Kotlin (1.3.71) (judge verdict: Accepted)

fun main(args: Array<String>) {
  val (Ns, Ks) = readStrings()
  val N = Ns.toInt()
  var K = Ks.toLong()
  val AN = readInts()

  val map = hashMapOf<Int, Int>()
  val array = Array(N + 1) { 0 } // i 回目に到着する町がどこか
  array[0] = 1 // 始めは町１
  map[1] = 0

  var loopBegin = -1
  var loopEnd = -1

  for (i in 1..N) {
    val prev = array[i - 1]
    val current = AN[prev - 1]
    array[i] = current
    if (map.contains(array[i])) { // ループしたら終了
      loopBegin = current
      loopEnd = prev
      break
    }
    map[current] = i
  }

//  println(array.joinToString())
//  println(map)
//  println("$loopBegin $loopEnd")

  if (K <= map.size) {
    println(array[K.toInt()])
  } else {
    val begin = map[loopBegin]!!
    val end = map[loopEnd]!!
    val loopSize = end - begin + 1
    K -= begin
    println(array[begin + (K % loopSize).toInt()])
  }
}

fun readString() = readLine()!!
fun readStrings() = readString().split(" ")
fun readInt() = readString().toInt()
fun readLong() = readString().toLong()
fun readInts() = readStrings().map { it.toInt() }
fun readLongs() = readStrings().map { it.toLong() }