#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int n, q, val[MAXN];
vector<int> g[MAXN];
int tin[MAXN], timer;
int up[MAXN][20], depth[MAXN];
long long fenw1[MAXN], fenw2[MAXN];
void upd(long long fenw[], int i, long long v) {
for (; i<=n; i+=i&-i) fenw[i]+=v;
}
long long get(long long fenw[], int i) {
long long r=0;
for(;i;i-=i&-i) r+=fenw[i];
return r;
}
void dfs(int u,int p){
tin[u]=++timer;
up[u][0]=p;
for(int i=1;i<20;i++) up[u][i]=up[up[u][i-1]][i-1];
for(int v:g[u]) if(v!=p){
depth[v]=depth[u]+1;
dfs(v,u);
}
}
int lca(int u,int v){
if(depth[u]<depth[v]) swap(u,v);
int k=depth[u]-depth[v];
for(int i=19;i>=0;i--) if(k>>i&1) u=up[u][i];
if(u==v) return u;
for(int i=19;i>=0;i--) if(up[u][i]!=up[v][i]){
u=up[u][i]; v=up[v][i];
}
return up[u][0];
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>val[i];
for(int i=1;i<n;i++){
int u,v;cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1,1);
for(int i=1;i<=n;i++){
upd(fenw1,tin[i],val[i]);
upd(fenw2,tin[i],(val[i]==1));
}
while(q--){
int u,v;cin>>u>>v;
int w=lca(u,v);
long long sum=get(fenw1,tin[u])+get(fenw1,tin[v])-2*get(fenw1,tin[w])+val[w];
if(sum<=0){
cout<<0<<"\n";
}else{
long long cnt=get(fenw2,tin[u])+get(fenw2,tin[v])-2*get(fenw2,tin[w])+(val[w]==1);
cout<<cnt<<"\n";
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDEwMDAwNTsKaW50IG4sIHEsIHZhbFtNQVhOXTsKdmVjdG9yPGludD4gZ1tNQVhOXTsKaW50IHRpbltNQVhOXSwgdGltZXI7CmludCB1cFtNQVhOXVsyMF0sIGRlcHRoW01BWE5dOwpsb25nIGxvbmcgZmVudzFbTUFYTl0sIGZlbncyW01BWE5dOwoKdm9pZCB1cGQobG9uZyBsb25nIGZlbndbXSwgaW50IGksIGxvbmcgbG9uZyB2KSB7CiAgICBmb3IgKDsgaTw9bjsgaSs9aSYtaSkgZmVud1tpXSs9djsKfQpsb25nIGxvbmcgZ2V0KGxvbmcgbG9uZyBmZW53W10sIGludCBpKSB7CiAgICBsb25nIGxvbmcgcj0wOwogICAgZm9yKDtpO2ktPWkmLWkpIHIrPWZlbndbaV07CiAgICByZXR1cm4gcjsKfQoKdm9pZCBkZnMoaW50IHUsaW50IHApewogICAgdGluW3VdPSsrdGltZXI7CiAgICB1cFt1XVswXT1wOwogICAgZm9yKGludCBpPTE7aTwyMDtpKyspIHVwW3VdW2ldPXVwW3VwW3VdW2ktMV1dW2ktMV07CiAgICBmb3IoaW50IHY6Z1t1XSkgaWYodiE9cCl7CiAgICAgICAgZGVwdGhbdl09ZGVwdGhbdV0rMTsKICAgICAgICBkZnModix1KTsKICAgIH0KfQoKaW50IGxjYShpbnQgdSxpbnQgdil7CiAgICBpZihkZXB0aFt1XTxkZXB0aFt2XSkgc3dhcCh1LHYpOwogICAgaW50IGs9ZGVwdGhbdV0tZGVwdGhbdl07CiAgICBmb3IoaW50IGk9MTk7aT49MDtpLS0pIGlmKGs+PmkmMSkgdT11cFt1XVtpXTsKICAgIGlmKHU9PXYpIHJldHVybiB1OwogICAgZm9yKGludCBpPTE5O2k+PTA7aS0tKSBpZih1cFt1XVtpXSE9dXBbdl1baV0pewogICAgICAgIHU9dXBbdV1baV07IHY9dXBbdl1baV07CiAgICB9CiAgICByZXR1cm4gdXBbdV1bMF07Cn0KCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjaW4+Pm4+PnE7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgY2luPj52YWxbaV07CiAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsKICAgICAgICBpbnQgdSx2O2Npbj4+dT4+djsKICAgICAgICBnW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIGRmcygxLDEpOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIHVwZChmZW53MSx0aW5baV0sdmFsW2ldKTsKICAgICAgICB1cGQoZmVudzIsdGluW2ldLCh2YWxbaV09PTEpKTsKICAgIH0KICAgIHdoaWxlKHEtLSl7CiAgICAgICAgaW50IHUsdjtjaW4+PnU+PnY7CiAgICAgICAgaW50IHc9bGNhKHUsdik7CiAgICAgICAgbG9uZyBsb25nIHN1bT1nZXQoZmVudzEsdGluW3VdKStnZXQoZmVudzEsdGluW3ZdKS0yKmdldChmZW53MSx0aW5bd10pK3ZhbFt3XTsKICAgICAgICBpZihzdW08PTApewogICAgICAgICAgICBjb3V0PDwwPDwiXG4iOwogICAgICAgIH1lbHNlewogICAgICAgICAgICBsb25nIGxvbmcgY250PWdldChmZW53Mix0aW5bdV0pK2dldChmZW53Mix0aW5bdl0pLTIqZ2V0KGZlbncyLHRpblt3XSkrKHZhbFt3XT09MSk7CiAgICAgICAgICAgIGNvdXQ8PGNudDw8IlxuIjsKICAgICAgICB9CiAgICB9Cn0K