#include <fstream>
#include <vector>
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int E[200010],N[200010],first[100010],x,y,a,b,n,m,i,k,D[20][200010],L1[200010];
vector<int> L[100010];
void dfs(int nod, int niv){
E[++k]=nod;
first[nod]=k;
N[k]=niv;
for(int i=0;i<L[nod].size();i++){
int vec=L[nod][i];
dfs(vec,niv+1);
E[++k]=nod;
N[k]=niv;
}
}
int main(){
fin>>n>>m;
for(i=1;i<n;i++){
fin>>x;
L[x].push_back(i+1);
}
dfs(1,1);
for(i=1;i<=k;i++)
D[0][i]=i;
for(i=1;(1<<i)<=k;i++)
for(int j=1;j<=k;j++){
D[i][j]=D[i-1][j];
if(j+(1<<(i-1))<=k&&N[D[i-1][j+(1<<(i-1))]]<N[D[i-1][j]])
D[i][j]=D[i-1][j+(1<<(i-1))];
}
for(i=2;i<=k;i++)
L1[i]=1+L1[i/2];
for(;m--;){
fin>>x>>y;
x=first[x];
y=first[y];
a=min(x,y);
b=max(x,y);
int l=L1[b-a+1];
if(N[D[l][a]]<N[D[l][b-(1<<l)+1]])
fout<<E[D[l][a]]<<"\n";
else
fout<<E[D[l][b-(1<<l)+1]]<<"\n";
}
return 0;
}