Problem p02684 (C++)

Buggy submission (status: Runtime Error):
/********************************
*** ******** ********** *********
*** * ****** ********* * ********
*** ** ***** ******** *** *******
*** *** **** ******* ***** ******
*** **** *** ****** ******* *****
*** ***** ** ***** +++++++++ ****
*** ****** * **** *********** ***
*** *******  *** ************* **
*** ******** ** *************** *
**********_**********************
* |   /  / \  \     /    /\     *
* |  /  |   |  \   /    /  \    *
* | /   |   |   \ /    /    \   *
* |+\   |   |    |    /______\  *
* |  \  |   |    |   |        | *
* |   \  \_/     |   |        | *
********************************/
#include <bits/stdc++.h>
#define lli long long int
#define MOD 1000000007
#define KING 1000000002
#define queen 1000002
#define fi first
#define se second
#define se second
#define lsb(i) (i & -i)
#define nl cout << '\n'
#define TEST cout << "TEST", nl
#define pr pair<lli, lli>
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define vi vector<lli>
#define vpi vector<pr>
#define P pair<lli, pr>
#define fastIO                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL)
#define NA(i, s, n) for (lli i = s; i < n; i++)
using namespace std;

void solve() {
  lli n, k, i = 1;
  cin >> n >> k;
  vi a(n + 1), vis(n + 1, 0);
  NA(i, 1, n + 1) cin >> a[i];
  while (k) {
    if (!vis[a[i]])
      vis[a[i]] = 1;
    else
      break;
    i = a[i];
    --k;
  }
  lli j = 0, p = i;
  unordered_map<lli, lli> mpp;
  while (k) {
    mpp[j] = i;
    i = a[i];
    ++j;
    if (i == p)
      break;
  }
  cout << mpp[k % j];
  return;
}
int main() {
  fastIO;
  lli t = 1;
  // cin>>t;
  NA(i, 0, t) solve();
  return 0;
}

Fixed submission:
/********************************
*** ******** ********** *********
*** * ****** ********* * ********
*** ** ***** ******** *** *******
*** *** **** ******* ***** ******
*** **** *** ****** ******* *****
*** ***** ** ***** +++++++++ ****
*** ****** * **** *********** ***
*** *******  *** ************* **
*** ******** ** *************** *
**********_**********************
* |   /  / \  \     /    /\     *
* |  /  |   |  \   /    /  \    *
* | /   |   |   \ /    /    \   *
* |+\   |   |    |    /______\  *
* |  \  |   |    |   |        | *
* |   \  \_/     |   |        | *
********************************/
#include <bits/stdc++.h>
#define lli long long int
#define MOD 1000000007
#define KING 1000000002
#define queen 1000002
#define fi first
#define se second
#define se second
#define lsb(i) (i & -i)
#define nl cout << '\n'
#define TEST cout << "TEST", nl
#define pr pair<lli, lli>
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define vi vector<lli>
#define vpi vector<pr>
#define P pair<lli, pr>
#define fastIO                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL)
#define NA(i, s, n) for (lli i = s; i < n; i++)
using namespace std;

void solve() {
  lli n, k, i = 1;
  cin >> n >> k;
  vi a(n + 1), vis(n + 1, 0);
  NA(i, 1, n + 1) cin >> a[i];
  while (k) {
    if (!vis[a[i]])
      vis[a[i]] = 1;
    else
      break;
    i = a[i];
    --k;
  }
  if (!k) {
    cout << i;
    return;
  }
  lli j = 0, p = i;
  unordered_map<lli, lli> mpp;
  while (k) {
    mpp[j] = i;
    i = a[i];
    ++j;
    if (i == p)
      break;
  }
  cout << mpp[k % j];
  return;
}
int main() {
  fastIO;
  lli t = 1;
  // cin>>t;
  NA(i, 0, t) solve();
  return 0;
}