#include<bits/stdc++.h>
#include <stack>
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int v[100001];
int c[100001];
stack<int> s1, s2;
bool dfs(int rt, int tg, int n){
if(rt == tg){
c[rt]+=1;
return true;
}
for(int i=1; i <= n ; i++){
if(v[i] == rt){
bool gd = dfs(i, tg, n);
if(gd){
c[rt]+=1;
return gd;
}
}
}
return false;
}
int main(){
int n, m, nr, a, b;
fin >> n >> m;
for(int i=1; i < n ; i++){
fin >> nr;
v[i+1]=nr;
}
for(int j=1; j <= m ; j++){
fin >> a >> b;
dfs(1, a, n);
dfs(1, b, n);
for(int k=n; k >= 1 ; k--){
if(c[k] >= 2){
fout << k <<'\n';
break;
}
}
for(int i=1; i <= n ; i++){
c[i]=0;
}
}
return 0;
}