#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int n, q, val[MAXN];
vector<int> g[MAXN];
int up[MAXN][20], depth[MAXN];
long long fsum[MAXN], fcnt[MAXN];
void dfs(int u, int p) {
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;
fsum[v] = fsum[u] + val[v];
fcnt[v] = fcnt[u] + (val[v]==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);
}
fsum[1] = val[1];
fcnt[1] = (val[1]==1);
dfs(1,1);
while(q--) {
int u,v; cin >> u >> v;
int w = lca(u,v);
long long sum = fsum[u] + fsum[v] - 2*fsum[w] + val[w];
if(sum <= 0) {
cout << 0 << "\n";
} else {
long long cnt = fcnt[u] + fcnt[v] - 2*fcnt[w] + (val[w]==1);
cout << cnt << "\n";
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDEwMDAwNTsKaW50IG4sIHEsIHZhbFtNQVhOXTsKdmVjdG9yPGludD4gZ1tNQVhOXTsKaW50IHVwW01BWE5dWzIwXSwgZGVwdGhbTUFYTl07CmxvbmcgbG9uZyBmc3VtW01BWE5dLCBmY250W01BWE5dOwoKdm9pZCBkZnMoaW50IHUsIGludCBwKSB7CiAgICB1cFt1XVswXSA9IHA7CiAgICBmb3IgKGludCBpPTE7IGk8MjA7IGkrKykgdXBbdV1baV0gPSB1cFt1cFt1XVtpLTFdXVtpLTFdOwogICAgZm9yIChpbnQgdjpnW3VdKSBpZiAodiE9cCkgewogICAgICAgIGRlcHRoW3ZdID0gZGVwdGhbdV0rMTsKICAgICAgICBmc3VtW3ZdID0gZnN1bVt1XSArIHZhbFt2XTsKICAgICAgICBmY250W3ZdID0gZmNudFt1XSArICh2YWxbdl09PTEpOwogICAgICAgIGRmcyh2LHUpOwogICAgfQp9CgppbnQgbGNhKGludCB1LGludCB2KSB7CiAgICBpZihkZXB0aFt1XTxkZXB0aFt2XSkgc3dhcCh1LHYpOwogICAgaW50IGs9ZGVwdGhbdV0tZGVwdGhbdl07CiAgICBmb3IoaW50IGk9MTk7aT49MDtpLS0pIGlmKGs+PmkmMSkgdT11cFt1XVtpXTsKICAgIGlmKHU9PXYpIHJldHVybiB1OwogICAgZm9yKGludCBpPTE5O2k+PTA7aS0tKSBpZih1cFt1XVtpXSE9dXBbdl1baV0pewogICAgICAgIHU9dXBbdV1baV07IHY9dXBbdl1baV07CiAgICB9CiAgICByZXR1cm4gdXBbdV1bMF07Cn0KCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgY2luID4+IHZhbFtpXTsKICAgIGZvcihpbnQgaT0xO2k8bjtpKyspIHsKICAgICAgICBpbnQgdSx2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIGZzdW1bMV0gPSB2YWxbMV07CiAgICBmY250WzFdID0gKHZhbFsxXT09MSk7CiAgICBkZnMoMSwxKTsKCiAgICB3aGlsZShxLS0pIHsKICAgICAgICBpbnQgdSx2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIGludCB3ID0gbGNhKHUsdik7CiAgICAgICAgbG9uZyBsb25nIHN1bSA9IGZzdW1bdV0gKyBmc3VtW3ZdIC0gMipmc3VtW3ddICsgdmFsW3ddOwogICAgICAgIGlmKHN1bSA8PSAwKSB7CiAgICAgICAgICAgIGNvdXQgPDwgMCA8PCAiXG4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxvbmcgbG9uZyBjbnQgPSBmY250W3VdICsgZmNudFt2XSAtIDIqZmNudFt3XSArICh2YWxbd109PTEpOwogICAgICAgICAgICBjb3V0IDw8IGNudCA8PCAiXG4iOwogICAgICAgIH0KICAgIH0KfQo=