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++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
#include <string>
#include <map>
#include <bitset>
#include <stack>
//#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define urept(soeji, start, n) for (int soeji = start; soeji < n; soeji++)
#define drept(soeji, start, n) for (int soeji = start; soeji > n; soeji--)

template <class T>
inline bool chmin(T &a, T b)
{
    if (a > b)
    {
        a = b;
        return true;
    }
    return false;
}
template <class T>
inline bool chmax(T &a, T b)
{
    if (a < b)
    {
        a = b;
        return true;
    }
}

int main(void)
{
    lli N, K;
    cin >> N >> K;
    vector<int> a;
    for (int i = 0; i < N; i++)
    {
        lli tmp;
        cin >> tmp;
        a.push_back(tmp);
    }
    vector<int> b;
    bool f[N + 1];
    fill(f, f + N + 1, false);
    lli route = 0;
    lli next = 1;
    lli rec;
    //f[1] = true;
    lli cnt = 0;
    while (1)
    {
        if (f[next] == false)
        {
            f[next] = true;
            next = a[route];
            route = next - 1;
            cnt++;
        }
        else
        {
            rec = next;
            break;
        }
    }
    cnt--;
    int vi[N + 1];
    fill(vi, vi + N + 1, 0);
    K -= cnt;
    lli memo = cnt;
    cnt = 0;
    while (1)
    {
        if (f[next] == false && vi[rec] != 2)
        {
            f[next] = true;
            next = a[route];
            route = next - 1;
            cnt++;
        }
        else
        {
            //rec = next;
            break;
        }
    }
    cnt--;
    if (K % (cnt - memo) == 0)
    {
        cout << K % (cnt - memo) + N << endl;
    }
    else
    {
        cout << K % (cnt - memo) << endl;
    }
    return 0;
}