#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 50;
int n, m;
vector <int> e[N];
int d[N];
int f[20][N];
inline void dfs(int u) {
for (auto v : e[u]) {
d[v] = d[u] + 1;
dfs(v);
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 2; i <= n; i++) {
int x;
scanf("%d", &x);
e[x].push_back(i);
f[0][i] = x;
}
d[1] = 1;
dfs(1);
for (int i = 1; i <= n; i++) cerr << d[i] << endl;
for (int i = 1; i <= 20; i++)
for (int j = 1; j <= n; j++)
f[i][j] = f[i - 1][f[i - 1][j]];
for (int i = 1; i <= n; i++) cerr << d[i] << endl;
return 0;
while (m--) {
int x, y;
scanf("%d%d", &x, &y);
if (d[x] < d[y]) swap(x, y);
int c = d[x] - d[y];
cerr << d[x] << " " << d[y] << " ";
for (int i = 0; c; i++)
if (c & (1 << i))
x = f[i][x], c -= 1 << i;
cerr << c << " " << x << " " << y << endl;
if (x == y) {
printf("%d\n", x);
continue;
}
for (int i = 20; i >= 0; i--)
if (f[i][x] != f[i][y])
x = f[i][x], y = f[i][y];
printf("%d\n", f[0][x]);
}
return 0;
}