#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int LOG = 20;
struct BIT {
int n; vector<int> b;
void init(int _n){ n=_n; b.assign(n+1,0); }
void add(int i,int v){ for(; i<=n; i+=i&-i) b[i]+=v; }
int sum(int i){ int r=0; for(; i>0; i-=i&-i) r+=b[i]; return r; }
};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,q;
if(!(cin>>n>>q)) return 0;
vector<int> val(n+1);
for(int i=1;i<=n;i++) cin>>val[i];
vector<vector<int>> g(n+1);
for(int i=1;i<n;i++){
int u,v; cin>>u>>v;
g[u].push_back(v); g[v].push_back(u);
}
vector<array<int,LOG>> up(n+1);
vector<int> depth(n+1,0);
vector<ll> f(n+1,0);
function<void(int,int)> dfs0 = [&](int u,int p){
up[u][0]=p;
for(int j=1;j<LOG;j++) up[u][j]=up[ up[u][j-1] ][j-1];
for(int v: g[u]) if(v!=p){
depth[v]=depth[u]+1;
f[v]=f[u]+val[v];
dfs0(v,u);
}
};
f[1]=val[1];
dfs0(1,0);
auto lca = [&](int a,int b){
if(depth[a]<depth[b]) swap(a,b);
int k = depth[a]-depth[b];
for(int j=LOG-1;j>=0;j--) if(k>>j & 1) a = up[a][j];
if(a==b) return a;
for(int j=LOG-1;j>=0;j--) if(up[a][j]!=up[b][j]){ a=up[a][j]; b=up[b][j]; }
return up[a][0];
};
vector<int> U(q+1), V(q+1), W(q+1);
vector<ll> T(q+1);
vector<ll> vals;
vals.reserve(n+q+5);
for(int i=1;i<=n;i++) vals.push_back(f[i]);
for(int i=1;i<=q;i++){
int u,v; cin>>u>>v;
U[i]=u; V[i]=v;
W[i]=lca(u,v);
T[i]=f[u]-val[u];
vals.push_back(T[i]);
}
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
int M = (int)vals.size();
auto posF = [&](ll x){ return (int)(lower_bound(vals.begin(), vals.end(), x) - vals.begin()) + 1; };
auto posLE = [&](ll x){ return (int)(upper_bound(vals.begin(), vals.end(), x) - vals.begin()); };
vector<int> fpos(n+1);
for(int i=1;i<=n;i++) fpos[i]=posF(f[i]);
vector<int> needpos(q+1);
for(int i=1;i<=q;i++) needpos[i]=posLE(T[i]);
vector<vector<tuple<int,int,int>>> gu(n+1);
for(int i=1;i<=q;i++){
gu[U[i]].push_back({i, needpos[i], +1});
gu[V[i]].push_back({i, needpos[i], +1});
gu[W[i]].push_back({i, needpos[i], -2});
}
vector<ll> ans(q+1,0);
for(int i=1;i<=q;i++) if(f[ W[i] ] > T[i]) ans[i]++;
BIT bit; bit.init(max(1,M));
function<void(int,int)> dfs = [&](int u,int p){
bit.add(fpos[u],1);
for(auto &t: gu[u]){
int id, idx, sign; tie(id, idx, sign) = t;
int greater = bit.sum(M) - bit.sum(idx);
ans[id] += 1LL * sign * greater;
}
for(int v: g[u]) if(v!=p) dfs(v,u);
bit.add(fpos[u],-1);
};
dfs(1,0);
for(int i=1;i<=q;i++) cout<<ans[i]<<"\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwpjb25zdCBpbnQgTE9HID0gMjA7CgpzdHJ1Y3QgQklUIHsKICAgIGludCBuOyB2ZWN0b3I8aW50PiBiOwogICAgdm9pZCBpbml0KGludCBfbil7IG49X247IGIuYXNzaWduKG4rMSwwKTsgfQogICAgdm9pZCBhZGQoaW50IGksaW50IHYpeyBmb3IoOyBpPD1uOyBpKz1pJi1pKSBiW2ldKz12OyB9CiAgICBpbnQgc3VtKGludCBpKXsgaW50IHI9MDsgZm9yKDsgaT4wOyBpLT1pJi1pKSByKz1iW2ldOyByZXR1cm4gcjsgfQp9OwoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgbixxOwogICAgaWYoIShjaW4+Pm4+PnEpKSByZXR1cm4gMDsKICAgIHZlY3RvcjxpbnQ+IHZhbChuKzEpOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIGNpbj4+dmFsW2ldOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBnKG4rMSk7CiAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsKICAgICAgICBpbnQgdSx2OyBjaW4+PnU+PnY7CiAgICAgICAgZ1t1XS5wdXNoX2JhY2sodik7IGdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIHZlY3RvcjxhcnJheTxpbnQsTE9HPj4gdXAobisxKTsKICAgIHZlY3RvcjxpbnQ+IGRlcHRoKG4rMSwwKTsKICAgIHZlY3RvcjxsbD4gZihuKzEsMCk7CgogICAgZnVuY3Rpb248dm9pZChpbnQsaW50KT4gZGZzMCA9IFsmXShpbnQgdSxpbnQgcCl7CiAgICAgICAgdXBbdV1bMF09cDsKICAgICAgICBmb3IoaW50IGo9MTtqPExPRztqKyspIHVwW3VdW2pdPXVwWyB1cFt1XVtqLTFdIF1bai0xXTsKICAgICAgICBmb3IoaW50IHY6IGdbdV0pIGlmKHYhPXApewogICAgICAgICAgICBkZXB0aFt2XT1kZXB0aFt1XSsxOwogICAgICAgICAgICBmW3ZdPWZbdV0rdmFsW3ZdOwogICAgICAgICAgICBkZnMwKHYsdSk7CiAgICAgICAgfQogICAgfTsKICAgIGZbMV09dmFsWzFdOwogICAgZGZzMCgxLDApOwoKICAgIGF1dG8gbGNhID0gWyZdKGludCBhLGludCBiKXsKICAgICAgICBpZihkZXB0aFthXTxkZXB0aFtiXSkgc3dhcChhLGIpOwogICAgICAgIGludCBrID0gZGVwdGhbYV0tZGVwdGhbYl07CiAgICAgICAgZm9yKGludCBqPUxPRy0xO2o+PTA7ai0tKSBpZihrPj5qICYgMSkgYSA9IHVwW2FdW2pdOwogICAgICAgIGlmKGE9PWIpIHJldHVybiBhOwogICAgICAgIGZvcihpbnQgaj1MT0ctMTtqPj0wO2otLSkgaWYodXBbYV1bal0hPXVwW2JdW2pdKXsgYT11cFthXVtqXTsgYj11cFtiXVtqXTsgfQogICAgICAgIHJldHVybiB1cFthXVswXTsKICAgIH07CgogICAgdmVjdG9yPGludD4gVShxKzEpLCBWKHErMSksIFcocSsxKTsKICAgIHZlY3RvcjxsbD4gVChxKzEpOwogICAgdmVjdG9yPGxsPiB2YWxzOwogICAgdmFscy5yZXNlcnZlKG4rcSs1KTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSB2YWxzLnB1c2hfYmFjayhmW2ldKTsKCiAgICBmb3IoaW50IGk9MTtpPD1xO2krKyl7CiAgICAgICAgaW50IHUsdjsgY2luPj51Pj52OwogICAgICAgIFVbaV09dTsgVltpXT12OwogICAgICAgIFdbaV09bGNhKHUsdik7CiAgICAgICAgVFtpXT1mW3VdLXZhbFt1XTsKICAgICAgICB2YWxzLnB1c2hfYmFjayhUW2ldKTsKICAgIH0KCiAgICBzb3J0KHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSk7CiAgICB2YWxzLmVyYXNlKHVuaXF1ZSh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCkpLCB2YWxzLmVuZCgpKTsKICAgIGludCBNID0gKGludCl2YWxzLnNpemUoKTsKCiAgICBhdXRvIHBvc0YgPSBbJl0obGwgeCl7IHJldHVybiAoaW50KShsb3dlcl9ib3VuZCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCksIHgpIC0gdmFscy5iZWdpbigpKSArIDE7IH07CiAgICBhdXRvIHBvc0xFICA9IFsmXShsbCB4KXsgcmV0dXJuIChpbnQpKHVwcGVyX2JvdW5kKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSwgeCkgLSB2YWxzLmJlZ2luKCkpOyB9OwoKICAgIHZlY3RvcjxpbnQ+IGZwb3MobisxKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBmcG9zW2ldPXBvc0YoZltpXSk7CgogICAgdmVjdG9yPGludD4gbmVlZHBvcyhxKzEpOwogICAgZm9yKGludCBpPTE7aTw9cTtpKyspIG5lZWRwb3NbaV09cG9zTEUoVFtpXSk7CgogICAgdmVjdG9yPHZlY3Rvcjx0dXBsZTxpbnQsaW50LGludD4+PiBndShuKzEpOwogICAgZm9yKGludCBpPTE7aTw9cTtpKyspewogICAgICAgIGd1W1VbaV1dLnB1c2hfYmFjayh7aSwgbmVlZHBvc1tpXSwgKzF9KTsKICAgICAgICBndVtWW2ldXS5wdXNoX2JhY2soe2ksIG5lZWRwb3NbaV0sICsxfSk7CiAgICAgICAgZ3VbV1tpXV0ucHVzaF9iYWNrKHtpLCBuZWVkcG9zW2ldLCAtMn0pOwogICAgfQoKICAgIHZlY3RvcjxsbD4gYW5zKHErMSwwKTsKICAgIGZvcihpbnQgaT0xO2k8PXE7aSsrKSBpZihmWyBXW2ldIF0gPiBUW2ldKSBhbnNbaV0rKzsKCiAgICBCSVQgYml0OyBiaXQuaW5pdChtYXgoMSxNKSk7CiAgICBmdW5jdGlvbjx2b2lkKGludCxpbnQpPiBkZnMgPSBbJl0oaW50IHUsaW50IHApewogICAgICAgIGJpdC5hZGQoZnBvc1t1XSwxKTsKICAgICAgICBmb3IoYXV0byAmdDogZ3VbdV0pewogICAgICAgICAgICBpbnQgaWQsIGlkeCwgc2lnbjsgdGllKGlkLCBpZHgsIHNpZ24pID0gdDsKICAgICAgICAgICAgaW50IGdyZWF0ZXIgPSBiaXQuc3VtKE0pIC0gYml0LnN1bShpZHgpOwogICAgICAgICAgICBhbnNbaWRdICs9IDFMTCAqIHNpZ24gKiBncmVhdGVyOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IHY6IGdbdV0pIGlmKHYhPXApIGRmcyh2LHUpOwogICAgICAgIGJpdC5hZGQoZnBvc1t1XSwtMSk7CiAgICB9OwogICAgZGZzKDEsMCk7CgogICAgZm9yKGludCBpPTE7aTw9cTtpKyspIGNvdXQ8PGFuc1tpXTw8IlxuIjsKICAgIHJldHVybiAwOwp9Cg==