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 <bits/stdc++.h>
#define int long long
#define rng(i, l, r) for (size_t i = (l); i < (r); ++i)
#define rep(i, n) rng(i, 0, n)
#define gnr(i, l, r) for (size_t i = (r)-1; i >= (l); i--)
#define per(i, b) gnr(i, 0, b)
#define ALL(obj) (obj).begin(), (obj).end()    //1,2,3,...
#define rALL(obj) (obj).rbegin(), (obj).rend() //...,3,2,1
using namespace std;
const int INF = 1e18;
const int MOD = 1000000007;

void solve()
{

    // remove the bottom 3 lines when you submit this code.
    std::ifstream in("sample.txt");
    std::cin.rdbuf(in.rdbuf());

    cin.tie(0);
    ios::sync_with_stdio(false);

    int n, k;
    cin >> n >> k;
    int a[n];
    rep(i, n)
    {
        cin >> a[i];
        a[i]--;
    }
    vector<int> record(0);
    record.emplace_back(0);
    map<int, int> mp;
    mp[0]++;
    int pos = 0;
    while (true)
    {
        if (mp[a[pos]])
        {
            record.push_back(a[pos]);
            break;
        }
        mp[a[pos]]++;
        record.emplace_back(a[pos]);
        pos = a[pos];
    }

    int loop = 0;
    reverse(ALL(record));
    rep(i, record.size())
    {
        if (i != 0 && record[i] == record[0])
            break;
        loop++;
    }
    reverse(ALL(record));

    int front = record.size() - loop - 1;
    if (k <= front)
    {
        cout << record[k - 1] << endl;
    }
    else
    {
        int rest = (k - front) % loop;
        cout << record[front + rest] + 1 << endl;
    }
}

signed main()
{
    solve();
    return 0;
}