#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n,q;
int val[N],in[N],out[N],euler[2*N],tim=0;
int dep[N],par[N][20];
long long f[N];
vector<int> g[N];
void dfs(int u,int p){
in[u]=++tim; euler[tim]=u;
par[u][0]=p;
for(int i=1;i<20;i++) par[u][i]=par[par[u][i-1]][i-1];
for(int v:g[u]) if(v!=p){
dep[v]=dep[u]+1;
f[v]=f[u]+val[v];
dfs(v,u);
}
out[u]=++tim; euler[tim]=u;
}
int lca(int u,int v){
if(dep[u]<dep[v]) swap(u,v);
for(int i=19;i>=0;i--) if(dep[par[u][i]]>=dep[v]) u=par[u][i];
if(u==v) return u;
for(int i=19;i>=0;i--) if(par[u][i]!=par[v][i]) u=par[u][i],v=par[v][i];
return par[u][0];
}
struct Fenwick{
vector<int> bit;
Fenwick(int n){bit.assign(n+2,0);}
void upd(int i,int v){for(;i<(int)bit.size();i+=i&-i) bit[i]+=v;}
int get(int i){int r=0;for(;i>0;i-=i&-i) r+=bit[i];return r;}
int range(int l,int r){return get(r)-get(l-1);}
};
struct Q{int l,r,u,v,lc,id;};
int BLOCK;
bool cmp(Q a,Q b){
if(a.l/BLOCK!=b.l/BLOCK) return a.l<b.l;
return a.r<b.r;
}
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);
}
f[1]=val[1];
dfs(1,0);
vector<long long> comp;
for(int i=1;i<=n;i++) comp.push_back(f[i]);
sort(comp.begin(),comp.end());
comp.erase(unique(comp.begin(),comp.end()),comp.end());
auto getId=[&](long long x){
return (int)(lower_bound(comp.begin(),comp.end(),x)-comp.begin()+1);
};
vector<int> fid(n+1);
for(int i=1;i<=n;i++) fid[i]=getId(f[i]);
BLOCK=sqrt(tim);
vector<Q> qs;
for(int i=1;i<=q;i++){
int u,v;cin>>u>>v;
int lc=lca(u,v);
int l=in[u],r=in[v]; if(l>r) swap(l,r);
qs.push_back({l,r,u,v,lc,i});
}
sort(qs.begin(),qs.end(),cmp);
Fenwick fw(comp.size()+5);
vector<int> on(n+1,0),ans(q+1);
auto toggle=[&](int idx){
int u=euler[idx]; if(!u) return;
if(on[u]){ fw.upd(fid[u],-1); on[u]=0; }
else{ fw.upd(fid[u],+1); on[u]=1; }
};
int L=1,R=0;
for(auto qu:qs){
while(L>qu.l) toggle(--L);
while(R<qu.r) toggle(++R);
while(L<qu.l) toggle(L++);
while(R>qu.r) toggle(R--);
int u=qu.u,v=qu.v,lc=qu.lc;
long long fu=f[u],flc=f[lc];
int lessU=fw.range(1,getId(fu)-1);
long long need=fu-2*flc;
int moreV=fw.range(getId(need+1),comp.size());
int res=lessU+moreV;
if(on[lc]==0){
if(f[lc]<fu) res++;
else if(f[lc]>need) res++;
}
ans[qu.id]=res;
}
for(int i=1;i<=q;i++) cout<<ans[i]<<"\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDIwMDAwNTsKaW50IG4scTsKaW50IHZhbFtOXSxpbltOXSxvdXRbTl0sZXVsZXJbMipOXSx0aW09MDsKaW50IGRlcFtOXSxwYXJbTl1bMjBdOwpsb25nIGxvbmcgZltOXTsKdmVjdG9yPGludD4gZ1tOXTsKCnZvaWQgZGZzKGludCB1LGludCBwKXsKICAgIGluW3VdPSsrdGltOyBldWxlclt0aW1dPXU7CiAgICBwYXJbdV1bMF09cDsKICAgIGZvcihpbnQgaT0xO2k8MjA7aSsrKSBwYXJbdV1baV09cGFyW3Bhclt1XVtpLTFdXVtpLTFdOwogICAgZm9yKGludCB2OmdbdV0pIGlmKHYhPXApewogICAgICAgIGRlcFt2XT1kZXBbdV0rMTsKICAgICAgICBmW3ZdPWZbdV0rdmFsW3ZdOwogICAgICAgIGRmcyh2LHUpOwogICAgfQogICAgb3V0W3VdPSsrdGltOyBldWxlclt0aW1dPXU7Cn0KCmludCBsY2EoaW50IHUsaW50IHYpewogICAgaWYoZGVwW3VdPGRlcFt2XSkgc3dhcCh1LHYpOwogICAgZm9yKGludCBpPTE5O2k+PTA7aS0tKSBpZihkZXBbcGFyW3VdW2ldXT49ZGVwW3ZdKSB1PXBhclt1XVtpXTsKICAgIGlmKHU9PXYpIHJldHVybiB1OwogICAgZm9yKGludCBpPTE5O2k+PTA7aS0tKSBpZihwYXJbdV1baV0hPXBhclt2XVtpXSkgdT1wYXJbdV1baV0sdj1wYXJbdl1baV07CiAgICByZXR1cm4gcGFyW3VdWzBdOwp9CgpzdHJ1Y3QgRmVud2lja3sKICAgIHZlY3RvcjxpbnQ+IGJpdDsKICAgIEZlbndpY2soaW50IG4pe2JpdC5hc3NpZ24obisyLDApO30KICAgIHZvaWQgdXBkKGludCBpLGludCB2KXtmb3IoO2k8KGludCliaXQuc2l6ZSgpO2krPWkmLWkpIGJpdFtpXSs9djt9CiAgICBpbnQgZ2V0KGludCBpKXtpbnQgcj0wO2Zvcig7aT4wO2ktPWkmLWkpIHIrPWJpdFtpXTtyZXR1cm4gcjt9CiAgICBpbnQgcmFuZ2UoaW50IGwsaW50IHIpe3JldHVybiBnZXQociktZ2V0KGwtMSk7fQp9OwoKc3RydWN0IFF7aW50IGwscix1LHYsbGMsaWQ7fTsKaW50IEJMT0NLOwpib29sIGNtcChRIGEsUSBiKXsKICAgIGlmKGEubC9CTE9DSyE9Yi5sL0JMT0NLKSByZXR1cm4gYS5sPGIubDsKICAgIHJldHVybiBhLnI8Yi5yOwp9CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGNpbj4+bj4+cTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBjaW4+PnZhbFtpXTsKICAgIGZvcihpbnQgaT0xO2k8bjtpKyspewogICAgICAgIGludCB1LHY7Y2luPj51Pj52OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQogICAgZlsxXT12YWxbMV07CiAgICBkZnMoMSwwKTsKCiAgICB2ZWN0b3I8bG9uZyBsb25nPiBjb21wOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIGNvbXAucHVzaF9iYWNrKGZbaV0pOwogICAgc29ydChjb21wLmJlZ2luKCksY29tcC5lbmQoKSk7CiAgICBjb21wLmVyYXNlKHVuaXF1ZShjb21wLmJlZ2luKCksY29tcC5lbmQoKSksY29tcC5lbmQoKSk7CiAgICBhdXRvIGdldElkPVsmXShsb25nIGxvbmcgeCl7CiAgICAgICAgcmV0dXJuIChpbnQpKGxvd2VyX2JvdW5kKGNvbXAuYmVnaW4oKSxjb21wLmVuZCgpLHgpLWNvbXAuYmVnaW4oKSsxKTsKICAgIH07CiAgICB2ZWN0b3I8aW50PiBmaWQobisxKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBmaWRbaV09Z2V0SWQoZltpXSk7CgogICAgQkxPQ0s9c3FydCh0aW0pOwogICAgdmVjdG9yPFE+IHFzOwogICAgZm9yKGludCBpPTE7aTw9cTtpKyspewogICAgICAgIGludCB1LHY7Y2luPj51Pj52OwogICAgICAgIGludCBsYz1sY2EodSx2KTsKICAgICAgICBpbnQgbD1pblt1XSxyPWluW3ZdOyBpZihsPnIpIHN3YXAobCxyKTsKICAgICAgICBxcy5wdXNoX2JhY2soe2wscix1LHYsbGMsaX0pOwogICAgfQogICAgc29ydChxcy5iZWdpbigpLHFzLmVuZCgpLGNtcCk7CgogICAgRmVud2ljayBmdyhjb21wLnNpemUoKSs1KTsKICAgIHZlY3RvcjxpbnQ+IG9uKG4rMSwwKSxhbnMocSsxKTsKCiAgICBhdXRvIHRvZ2dsZT1bJl0oaW50IGlkeCl7CiAgICAgICAgaW50IHU9ZXVsZXJbaWR4XTsgaWYoIXUpIHJldHVybjsKICAgICAgICBpZihvblt1XSl7IGZ3LnVwZChmaWRbdV0sLTEpOyBvblt1XT0wOyB9CiAgICAgICAgZWxzZXsgZncudXBkKGZpZFt1XSwrMSk7IG9uW3VdPTE7IH0KICAgIH07CgogICAgaW50IEw9MSxSPTA7CiAgICBmb3IoYXV0byBxdTpxcyl7CiAgICAgICAgd2hpbGUoTD5xdS5sKSB0b2dnbGUoLS1MKTsKICAgICAgICB3aGlsZShSPHF1LnIpIHRvZ2dsZSgrK1IpOwogICAgICAgIHdoaWxlKEw8cXUubCkgdG9nZ2xlKEwrKyk7CiAgICAgICAgd2hpbGUoUj5xdS5yKSB0b2dnbGUoUi0tKTsKICAgICAgICBpbnQgdT1xdS51LHY9cXUudixsYz1xdS5sYzsKICAgICAgICBsb25nIGxvbmcgZnU9Zlt1XSxmbGM9ZltsY107CiAgICAgICAgaW50IGxlc3NVPWZ3LnJhbmdlKDEsZ2V0SWQoZnUpLTEpOwogICAgICAgIGxvbmcgbG9uZyBuZWVkPWZ1LTIqZmxjOwogICAgICAgIGludCBtb3JlVj1mdy5yYW5nZShnZXRJZChuZWVkKzEpLGNvbXAuc2l6ZSgpKTsKICAgICAgICBpbnQgcmVzPWxlc3NVK21vcmVWOwogICAgICAgIGlmKG9uW2xjXT09MCl7CiAgICAgICAgICAgIGlmKGZbbGNdPGZ1KSByZXMrKzsKICAgICAgICAgICAgZWxzZSBpZihmW2xjXT5uZWVkKSByZXMrKzsKICAgICAgICB9CiAgICAgICAgYW5zW3F1LmlkXT1yZXM7CiAgICB9CiAgICBmb3IoaW50IGk9MTtpPD1xO2krKykgY291dDw8YW5zW2ldPDwiXG4iOwp9Cg==