#include <bits/stdc++.h>
using namespace std;
int main() {
  map<int, set<int> > mymap;
  stack<int> s;
  map<int, int> visit;
  vector<int> ans;
  map<int, int> index;
  map<int, int> co;
  int n, q;
  scanf("%d %d", &n, &q);
  int i, j, k, temp, x, d;
  for (i = 2; i <= n; i++) {
    scanf("%d", &k);
    mymap[k].insert(i);
    mymap[i].insert(k);
  }
  ans.push_back(1);
  visit[1] = 1;
  s.push(1);
  while (1) {
    while (!s.empty() && mymap[s.top()].empty()) {
      k = co[s.top()];
      s.pop();
      if (!s.empty()) co[s.top()] += k;
    }
    if (s.empty()) break;
    if (visit[*mymap[s.top()].begin()] == 0) {
      visit[*mymap[s.top()].begin()] = 1;
      ans.push_back(*mymap[s.top()].begin());
      co[s.top()]++;
      temp = *mymap[s.top()].begin();
      mymap[s.top()].erase(mymap[s.top()].begin());
      s.push(temp);
      continue;
    }
    mymap[s.top()].erase(mymap[s.top()].begin());
  }
  k = ans.size();
  for (i = 0; i < k; i++) {
    index[ans[i]] = i;
  }
  for (i = 0; i < q; i++) {
    scanf("%d %d", &x, &d);
    if (co[x] < d - 1) {
      printf("-1\n");
      continue;
    }
    k = index[x];
    j = ans[k + d - 1];
    printf("%d\n", j);
  }
  return 0;
}
