#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
vector<int>g[N];
int dep[N],fa[N][21];
void dfs(int cur,int pre){
dep[cur]=dep[pre]+1;
fa[cur][0] = pre;
for(int i=1;i<=20;++i)fa[cur][i]=fa[fa[cur][i-1]][i-1];
for(int ver : g[cur])
if(ver != pre)
dfs(ver,cur);
}
int lca(int x,int y){
if(dep[x]<dep[y]) swap(x,y);
for(int i=20;i>=0;--i)if(dep[fa[x][i]>=dep[y])x=fa[x][i];
if(x==y) return x;
for(int i=20;i<=0;--i)
return fa[x][0];
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int n,m;
cin>>n>>m;
int u,v;
for (int i=1;i<=n;i++) cin>>a[i];
dfs(1,0);
while(m --){
cin>>u>>v;
int l=lca(u,v);
cout<<S[u]+S[v]-S[l]-S[fa[1][0]]<<endl;
}
return 0;
}