#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> need(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;
int w = lca(u,v); W[i]=w;
need[i]=f[u]+f[v]-2*f[w]-val[w];
vals.push_back(need[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 posNeed = [&](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]=posNeed(need[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] ] > need[i]) ans[i]++;
BIT bit; bit.init(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+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwpjb25zdCBpbnQgTE9HID0gMjA7CnN0cnVjdCBCSVR7CiAgICBpbnQgbjsgdmVjdG9yPGludD4gYjsKICAgIHZvaWQgaW5pdChpbnQgX24peyBuPV9uOyBiLmFzc2lnbihuKzEsMCk7IH0KICAgIHZvaWQgYWRkKGludCBpLGludCB2KXsgZm9yKDsgaTw9bjsgaSs9aSYtaSkgYltpXSs9djsgfQogICAgaW50IHN1bShpbnQgaSl7IGludCByPTA7IGZvcig7IGk+MDsgaS09aSYtaSkgcis9YltpXTsgcmV0dXJuIHI7IH0KfTsKCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgaW50IG4scTsgaWYoIShjaW4+Pm4+PnEpKSByZXR1cm4gMDsKICAgIHZlY3RvcjxpbnQ+IHZhbChuKzEpOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIGNpbj4+dmFsW2ldOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBnKG4rMSk7CiAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsgaW50IHUsdjsgY2luPj51Pj52OyBnW3VdLnB1c2hfYmFjayh2KTsgZ1t2XS5wdXNoX2JhY2sodSk7IH0KICAgIHZlY3RvcjxhcnJheTxpbnQsTE9HPj4gdXAobisxKTsKICAgIHZlY3RvcjxpbnQ+IGRlcHRoKG4rMSwwKTsKICAgIHZlY3RvcjxsbD4gZihuKzEsMCk7CiAgICBmdW5jdGlvbjx2b2lkKGludCxpbnQpPiBkZnMwID0gWyZdKGludCB1LGludCBwKXsKICAgICAgICB1cFt1XVswXT1wOwogICAgICAgIGZvcihpbnQgaj0xO2o8TE9HO2orKykgdXBbdV1bal09dXBbIHVwW3VdW2otMV0gXVtqLTFdOwogICAgICAgIGZvcihpbnQgdjogZ1t1XSkgaWYodiE9cCl7CiAgICAgICAgICAgIGRlcHRoW3ZdPWRlcHRoW3VdKzE7CiAgICAgICAgICAgIGZbdl09Zlt1XSt2YWxbdl07CiAgICAgICAgICAgIGRmczAodix1KTsKICAgICAgICB9CiAgICB9OwogICAgZlsxXT12YWxbMV07CiAgICBkZnMwKDEsMCk7CiAgICBhdXRvIGxjYSA9IFsmXShpbnQgYSxpbnQgYil7CiAgICAgICAgaWYoZGVwdGhbYV08ZGVwdGhbYl0pIHN3YXAoYSxiKTsKICAgICAgICBpbnQgaz1kZXB0aFthXS1kZXB0aFtiXTsKICAgICAgICBmb3IoaW50IGo9TE9HLTE7aj49MDtqLS0pIGlmKGs+PmomMSkgYT11cFthXVtqXTsKICAgICAgICBpZihhPT1iKSByZXR1cm4gYTsKICAgICAgICBmb3IoaW50IGo9TE9HLTE7aj49MDtqLS0pIGlmKHVwW2FdW2pdIT11cFtiXVtqXSl7IGE9dXBbYV1bal07IGI9dXBbYl1bal07IH0KICAgICAgICByZXR1cm4gdXBbYV1bMF07CiAgICB9OwogICAgdmVjdG9yPGludD4gVShxKzEpLCBWKHErMSksIFcocSsxKTsKICAgIHZlY3RvcjxsbD4gbmVlZChxKzEpOwogICAgdmVjdG9yPGxsPiB2YWxzOwogICAgdmFscy5yZXNlcnZlKG4rcSs1KTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSB2YWxzLnB1c2hfYmFjayhmW2ldKTsKICAgIGZvcihpbnQgaT0xO2k8PXE7aSsrKXsKICAgICAgICBpbnQgdSx2OyBjaW4+PnU+PnY7CiAgICAgICAgVVtpXT11OyBWW2ldPXY7CiAgICAgICAgaW50IHcgPSBsY2EodSx2KTsgV1tpXT13OwogICAgICAgIG5lZWRbaV09Zlt1XStmW3ZdLTIqZlt3XS12YWxbd107CiAgICAgICAgdmFscy5wdXNoX2JhY2sobmVlZFtpXSk7CiAgICB9CiAgICBzb3J0KHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSk7CiAgICB2YWxzLmVyYXNlKHVuaXF1ZSh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCkpLCB2YWxzLmVuZCgpKTsKICAgIGludCBNID0gKGludCl2YWxzLnNpemUoKTsKICAgIGF1dG8gcG9zRiA9IFsmXShsbCB4KXsgcmV0dXJuIChpbnQpKGxvd2VyX2JvdW5kKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSwgeCkgLSB2YWxzLmJlZ2luKCkpICsgMTsgfTsKICAgIGF1dG8gcG9zTmVlZCA9IFsmXShsbCB4KXsgcmV0dXJuIChpbnQpKHVwcGVyX2JvdW5kKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSwgeCkgLSB2YWxzLmJlZ2luKCkpOyB9OwogICAgdmVjdG9yPGludD4gZnBvcyhuKzEpOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIGZwb3NbaV09cG9zRihmW2ldKTsKICAgIHZlY3RvcjxpbnQ+IG5lZWRwb3MocSsxKTsKICAgIGZvcihpbnQgaT0xO2k8PXE7aSsrKSBuZWVkcG9zW2ldPXBvc05lZWQobmVlZFtpXSk7CiAgICB2ZWN0b3I8dmVjdG9yPHR1cGxlPGludCxpbnQsaW50Pj4+IGd1KG4rMSk7CiAgICBmb3IoaW50IGk9MTtpPD1xO2krKyl7CiAgICAgICAgZ3VbVVtpXV0ucHVzaF9iYWNrKHtpLCBuZWVkcG9zW2ldLCArMX0pOwogICAgICAgIGd1W1ZbaV1dLnB1c2hfYmFjayh7aSwgbmVlZHBvc1tpXSwgKzF9KTsKICAgICAgICBndVtXW2ldXS5wdXNoX2JhY2soe2ksIG5lZWRwb3NbaV0sIC0yfSk7CiAgICB9CiAgICB2ZWN0b3I8bGw+IGFucyhxKzEsMCk7CiAgICBmb3IoaW50IGk9MTtpPD1xO2krKykgaWYoZlsgV1tpXSBdID4gbmVlZFtpXSkgYW5zW2ldKys7CiAgICBCSVQgYml0OyBiaXQuaW5pdChNKTsKICAgIGZ1bmN0aW9uPHZvaWQoaW50LGludCk+IGRmcyA9IFsmXShpbnQgdSxpbnQgcCl7CiAgICAgICAgYml0LmFkZChmcG9zW3VdLCAxKTsKICAgICAgICBmb3IoYXV0byAmdDogZ3VbdV0pewogICAgICAgICAgICBpbnQgaWQsIGlkeCwgc2lnbjsgdGllKGlkLCBpZHgsIHNpZ24pID0gdDsKICAgICAgICAgICAgaW50IGdyZWF0ZXIgPSBiaXQuc3VtKE0pIC0gYml0LnN1bShpZHgpOwogICAgICAgICAgICBhbnNbaWRdICs9IDFMTCAqIHNpZ24gKiBncmVhdGVyOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IHY6IGdbdV0pIGlmKHYhPXApIGRmcyh2LHUpOwogICAgICAgIGJpdC5hZGQoZnBvc1t1XSwgLTEpOwogICAgfTsKICAgIGRmcygxLDApOwogICAgZm9yKGludCBpPTE7aTw9cTtpKyspIGNvdXQ8PGFuc1tpXTw8IlxuIjsKICAgIHJldHVybiAwOwp9Cg==