#include <fstream>
#include <vector>
using namespace std;
ifstream cin("lca.in");
ofstream cout("lca.out");
int dp[18][202],t,v[101];
vector <int> g[100001];
void dfs(int k)
{
for(size_t i=0;i<g[k].size();i++)
{
dp[0][++t]=g[k][i];
v[g[k][i]]=t;
dfs(g[k][i]);
dp[0][++t]=k;
}
}
int main()
{
int n,m,x,i,y,j;
cin>>n>>m;
for(i=1;i<n;i++)
{
cin>>x;
g[x].push_back(i+1);
}
t=1;
dp[1][0]=1;
v[1]=1;
dfs(1);
for(i=1;(1<<i)<=2*n-1;i++)
for(j=1;j+(1<<i)-1<=2*n-1;j++)
dp[i][j]=min(dp[i-1][j],dp[i-1][j+(1<<(i-1))]);
int nr,k;
for(i=1;i<=m;i++)
{
cin>>x>>y;
x=v[x];
y=v[y];
if(x>y)
swap(x,y);
nr=y-x+1;
k=0;
while(nr>0)
{
k++;
nr>>=1;
}
k--;
cout<<min(dp[k][x],dp[k][y-(1<<k)+1])<<'\n';
}
return 0;
}