#include<fstream>
#include<vector>
#define N 100005
using namespace std;
ifstream F("lca.in");
ofstream G("lca.out");
vector<int> g[N];
int k,n,m,l[N<<1],h[N<<1],t[N<<1],f[N],r[20][N<<2],i,j,a,b,s,d,z,u;
void D(int d,int v)
{
int i,j=g[d].size();
h[++k]=d,l[k]=v,f[d]=k;
for(i=0;i<j;++i)
D(g[d][i],v+1),h[++k]=d,l[k]=v;
}
int main()
{
F>>n>>m;
for(i=2;i<=n;++i)
F>>j,g[j].push_back(i);
D(1,0);
for(i=2;i<=k;++i)
t[i]=t[i>>1]+1;
for(i=1;i<=k;++i)
r[0][i]=i;
for(i=1;(1<<i)<k;++i)
for(j=1;j<=k-(1<<i);++j) {
s=1<<(i-1),r[i][j]=r[i-1][j];
if(l[r[i-1][j+s]]<l[r[i][j]])
r[i][j]=r[i-1][j+s];
}
while(m--) {
F>>i>>j,a=f[i],b=f[j];
if(a>b)
s=a,a=b,b=s;
d=b-a+1,u=t[d],s=r[u][a],z=d-(1<<u);
if(l[s]>l[r[u][a+z]])
s=r[u][a+z];
G<<h[s]<<"\n";
}
return 0;
}