# include <bits/stdc++.h>
using namespace std;
int dp[123456][22];
int lg[123456];
int niv[123456];
int shift(int x,int y)
{
while (y)
{
x = dp[x][lg[y&(-y)]];
y -= y&(-y);
}
return x;
}
int lca(int x,int y)
{
if (niv[x] < niv[y])
y = shift(y,niv[y] - niv[x]);
else
x = shift(x,niv[x] - niv[y]);
for (int k = lg[niv[x]];x != y && k+1;--k)
if (dp[x][k] != dp[y][k])
x = dp[x][k],y = dp[y][k];
if (x == y) return x;
return dp[x][0];
}
int main(void)
{
int n,m,a,b;
ifstream fi("lca.in");
ofstream fo("lca.out");
fi>>n>>m;
for (int i = 2;i <= n;++i) lg[i] = lg[i>>1]+1;
for (int i = 2;i <= n;++i) fi>>dp[i][0],niv[i] = niv[dp[i][0]] + 1;
for (int j = 1;j <= lg[n];++j)
for (int i = 1;i <= n;++i)
dp[i][j] = dp[dp[i][j-1]][j-1];
while (m --)
{
fi>>a>>b;
fo << lca(a,b) << '\n';
}
return 0;
}