#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
const int LOG = 18;
int n, q;
vector<int> adj[N];
int up[LOG][N]; // up[i][u] = Tổ tiên thứ 2^i của u
int tin[N]; // tin[u] = Thời gian dfs đi vào đỉnh u
int tout[N]; // tout[u] = Thời gian dfs đi ra khỏi đỉnh u
int timer;
void dfs(int u, int p) {
tin[u] = ++timer;
up[0][u] = p;
for (int i = 1; i < LOG; i++) {
up[i][u] = up[i - 1][up[i - 1][u]];
}
for (int v : adj[u]) {
if (v == p) continue;
dfs(v, u);
}
tout[u] = timer;
}
// Kiểm tra u có phải tổ tiên của v
bool isAncestor(int u, int v) {
return (tin[u] <= tin[v] && tout[v] <= tout[u]);
}
// LCA (Lowest Common Ancestor) - Tổ tiên chung gần nhất của u và v
int lca(int u, int v) {
if (isAncestor(u, v)) return u;
if (isAncestor(v, u)) return v;
for (int i = LOG - 1; i >= 0; i--) {
if (!isAncestor(up[i][u], v)) {
u = up[i][u];
}
}
return up[0][u];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
for (int u = 2; u <= n; u++) {
int p; cin >> p;
adj[u].push_back(p);
adj[p].push_back(u);
}
timer = 0;
dfs(1, 1);
while (q--) {
int u, v;
cin >> u >> v;
cout << lca(u, v) << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAyZTUgKyA1OyAKY29uc3QgaW50IExPRyA9IDE4OyAgCgppbnQgbiwgcTsgCnZlY3RvcjxpbnQ+IGFkaltOXTsgCgppbnQgdXBbTE9HXVtOXTsgLy8gdXBbaV1bdV0gPSBU4buVIHRpw6puIHRo4bupIDJeaSBj4bunYSB1IAppbnQgdGluW05dOyAvLyB0aW5bdV0gPSBUaOG7nWkgZ2lhbiBkZnMgxJFpIHbDoG8gxJHhu4luaCB1IAppbnQgdG91dFtOXTsgLy8gdG91dFt1XSA9IFRo4budaSBnaWFuIGRmcyDEkWkgcmEga2jhu49pIMSR4buJbmggdSAKaW50IHRpbWVyOyAgCgp2b2lkIGRmcyhpbnQgdSwgaW50IHApIHsKCXRpblt1XSA9ICsrdGltZXI7ICAgCgkKCXVwWzBdW3VdID0gcDsgICAKCWZvciAoaW50IGkgPSAxOyBpIDwgTE9HOyBpKyspIHsKCQl1cFtpXVt1XSA9IHVwW2kgLSAxXVt1cFtpIC0gMV1bdV1dOyAKCX0KCQoJZm9yIChpbnQgdiA6IGFkalt1XSkgewoJCWlmICh2ID09IHApIGNvbnRpbnVlOyAgCgkJZGZzKHYsIHUpOyAKCX0KCgl0b3V0W3VdID0gdGltZXI7ICAKfQoKLy8gS2nhu4NtIHRyYSB1IGPDsyBwaOG6o2kgdOG7lSB0acOqbiBj4bunYSB2CmJvb2wgaXNBbmNlc3RvcihpbnQgdSwgaW50IHYpIHsKCXJldHVybiAodGluW3VdIDw9IHRpblt2XSAmJiB0b3V0W3ZdIDw9IHRvdXRbdV0pOyAgCn0KCi8vIExDQSAoTG93ZXN0IENvbW1vbiBBbmNlc3RvcikgLSBU4buVIHRpw6puIGNodW5nIGfhuqduIG5o4bqldCBj4bunYSB1IHbDoCB2CmludCBsY2EoaW50IHUsIGludCB2KSB7CglpZiAoaXNBbmNlc3Rvcih1LCB2KSkgcmV0dXJuIHU7ICAKCWlmIChpc0FuY2VzdG9yKHYsIHUpKSByZXR1cm4gdjsgCgkKCWZvciAoaW50IGkgPSBMT0cgLSAxOyBpID49IDA7IGktLSkgewoJCWlmICghaXNBbmNlc3Rvcih1cFtpXVt1XSwgdikpIHsKCQkJdSA9IHVwW2ldW3VdOyAKCQl9Cgl9CglyZXR1cm4gdXBbMF1bdV07IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbiA+PiBxOyAKCglmb3IgKGludCB1ID0gMjsgdSA8PSBuOyB1KyspIHsKCQlpbnQgcDsgY2luID4+IHA7ICAKCQlhZGpbdV0ucHVzaF9iYWNrKHApOyAKCQlhZGpbcF0ucHVzaF9iYWNrKHUpOyAKCX0KCgl0aW1lciA9IDA7ICAKCWRmcygxLCAxKTsgCgoJd2hpbGUgKHEtLSkgewoJCWludCB1LCB2OyAKCQljaW4gPj4gdSA+PiB2OyAKCQljb3V0IDw8IGxjYSh1LCB2KSA8PCAnXG4nOyAKCX0KfQ==