#include <fstream>
#include <vector>
#include <bitset>
#define DIM 100010
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int n,m,i,T[DIM],w[DIM],k,f[DIM],l1,l,nr,x,y,f2[DIM];
vector<int> L[DIM];
bitset<100010> f1;
void dfs(int nod, int niv){
f[nod]=1;
w[++k]=nod;
for(int i=0;i<L[nod].size();i++){
int vec=L[nod][i];
if(f[vec]==0){
dfs(vec,niv+1);
}
}
if(L[nod].size()==1)
f2[nod]=1;
w[++k]=nod;
}
int main(){
fin>>n>>m;
for(i=2;i<=n;i++){
fin>>T[i];
L[T[i]].push_back(i);
L[i].push_back(T[i]);
}
dfs(1,1);
for(int j=1;j<=m;j++){
fin>>x>>y;
nr=2;
l1=l=0;
f1.reset();
for(i=1;i<=k&&nr;i++){
if(f1[w[i]]==0){
if(w[i+1]==w[i]){
i++;
if(w[i]==x||w[i]==y)
nr--;
continue;
}
f1[w[i]]=1;
if(l){
l1=l;
l=w[i];
}else
l=w[i];
continue;
}
if(f1[w[i]]){
f1[w[i]]=0;
if(w[i]==x||w[i]==y)
nr--;
l=l1;
continue;
}
}
fout<<l<<"\n";
}
return 0;
}