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 rep(i,n) for (ll i=0 ; i<(n) ; ++i)
typedef long long ll;
using namespace std;
const ll MAX = 2500LL;
typedef pair <ll, ll> P;

using Graph = vector<vector<int>>;
// 探索
vector<bool> seen, finished;
int pos = -1; // サイクル中に含まれる頂点 pos
stack<int> hist; // 訪問履歴

void dfs(const Graph &G, int v, int p) {
    seen[v] = true;
    hist.push(v);
    for (auto nv : G[v]) {
        if (nv == p) continue; // 逆流を禁止する

        // 完全終了した頂点はスルー
        if (finished[nv]) continue;

        // サイクルを検出
        if (seen[nv] && !finished[nv]) {
            pos = nv;
            return;
        }

        // 再帰的に探索
        dfs(G, nv, v);

        // サイクル検出したならば真っ直ぐに抜けていく
        if (pos != -1) return;
    }
    hist.pop();
    finished[v] = true;
}
int main(){
  int n;
  ll k;
  cin >> n >> k;
  vector<int> a(n);
  Graph G(n);
  rep(i,n){
    int n_y;
    cin >> n_y;
    --n_y;
    a[i] = n_y;
    G[i].push_back(a[i]);
  }
  seen.assign(n, false), finished.assign(n, false);
  pos = -1;
  dfs(G, 0, -1);

  // サイクルを復元
  set<int> cycle;
  while (!hist.empty()) {
      int t = hist.top();
      cycle.insert(t);
      hist.pop();
      if (t == pos) break;
  }
  //cout << cycle.size() << endl;
  auto itr = cycle.begin();
  ll count = 0;
  int y=0;
  while(true){
    int j = a[y];
    count++;
    if(j == *itr){
      break;
    }
    y = j;
  }

  ll re = k - count;
  int amari = re%cycle.size();
  int ans;
  int z=*itr;
  for(int i=0; i<amari; i++){
    //int z = *itr;
    int j = a[z];
    z = j;
    ans = z;
  }
  cout << ans+1 << endl;
  return 0;
}