#include <bits/stdc++.h>
using namespace std;
int dfs(std::vector<bool>& vis, int ci, vector<int>& v,  vector<vector<int>>& list,unordered_map<int,int> & lenc){
    vis.at(ci)=1;
    v.push_back(ci);
    int uji=-1;
    int l=-1;
    for(int i=0;i<(int)list.at(ci).size();i++){
        if(vis.at(list.at(ci).at(i))==0){
            l=1;
        uji= dfs(vis,list.at(ci).at(i),v,list,lenc);
        }
    }
    if(l==-1) {lenc.at(ci)=ci; return ci;}
    lenc.at(ci)=uji;
    return uji;
}
int main() {
    int n,q;
    scanf("%d%d",&n,&q);
    vector<vector<int>> list(n+1);
    for(int  i=2;i<=n;i++){
        int a;
        scanf("%d",&a);
        list.at(a).push_back(i);
        list.at(i).push_back(a);
    }
    for(int i=1;i<=n;i++){
        sort(list.at(i).begin(),list.at(i).end());
    }
    unordered_map<int,int> lenc;
    vector<int>  v;
    std::vector<bool> vis(1+n, false);
    dfs(vis,1,v,list,lenc);
   unordered_map<int,int> m;

   for(int i=0;i<(int)v.size();i++){
       m[v[i]]=i;
   }

   while(q--){
       int a,b;
       cin>>a>>b;
       int i1=m.at(a);
       int i2=m.at(lenc.at(a));
       if(i1+b-1>i2) printf("-1\n");
       else printf("%d\n",v.at(i1+b-1));
   }
}