#include <bits/stdc++.h>
using namespace std;
const long long MX=1000100,INF=0x3f3f3f3f,MO=1e9+7;
vector<long long>vec[MX];
long long f[MX][3],fath[MX];
long long n;bool vis[MX],fg;
void dfs(long long now,long long fa){
if(vis[now]) return ;
if(fg) fath[now]=fa;
f[now][1]=f[now][0];
for(auto to:vec[now]){
if(to==fa) continue;
// printf("now=%lld to=%lld\n",now,to);
dfs(to,now);
f[now][1]^=f[to][0];
f[now][2]^=f[to][1];
}
// printf("now=%lld %lld %lld %lld\n",now,f[now][0],f[now][1],f[now][2]);
}
signed main(){long long q;
scanf("%lld%lld",&n,&q);
for(long long i=1;i<=n;i++) scanf("%lld",&f[i][0]);
for(long long i=1;i<n;i++){
long long x,y;scanf("%lld%lld",&x,&y);
vec[x].push_back(y),vec[y].push_back(x);
}
fg=1;dfs(1,0);memset(vis,1,sizeof(vis));fg=0;
// printf("\n\nnow begin\n");
long long ans=0;
for(long long i=1;i<=q;i++){
long long x,v;scanf("%lld%lld",&x,&v);
// f[fath[fath[x]]][2]^=f[fath[x]][1];
// f[fath[x]][1]^=f[x][0];
// f[fath[x]][2]^=f[x][0];
f[x][0]=v;
vis[x]=0;dfs(x,fath[x]);vis[x]=1;
vis[fath[x]]=0;dfs(fath[x],fath[fath[x]]);vis[fath[x]]=1;
vis[fath[fath[x]]]=0;dfs(fath[fath[x]],fath[fath[fath[x]]]);vis[fath[fath[x]]]=1;
f[0][0]=f[0][1]=f[0][2]=0;
long long sum=(f[x][2]^f[fath[x]][1])^f[fath[fath[x]]][0];
ans+=(sum*((i*i)%MO))%MO;ans%=MO;
// printf("%lld\n",sum);
// f
}
cout<<(ans%MO+MO)%MO;
return 0;
}
/*
CCCCCCCCCCCCC AAA IIIIIIIIII CCCCCCCCCCCCC AAA IIIIIIIIII AAA
CCC::::::::::::C A:::A I::::::::I CCC::::::::::::C A:::A I::::::::I A:::A
CC:::::::::::::::C A:::::A I::::::::I CC:::::::::::::::C A:::::A I::::::::I A:::::A
C:::::CCCCCCCC::::C A:::::::A II::::::IIC:::::CCCCCCCC::::C A:::::::A II::::::II A:::::::A
C:::::C CCCCCC A:::::::::A I::::I C:::::C CCCCCC A:::::::::A I::::I A:::::::::A
C:::::C A:::::A:::::A I::::IC:::::C A:::::A:::::A I::::I A:::::A:::::A
C:::::C A:::::A A:::::A I::::IC:::::C A:::::A A:::::A I::::I A:::::A A:::::A
C:::::C A:::::A A:::::A I::::IC:::::C A:::::A A:::::A I::::I A:::::A A:::::A
C:::::C A:::::A A:::::A I::::IC:::::C A:::::A A:::::A I::::I A:::::A A:::::A
C:::::C A:::::AAAAAAAAA:::::A I::::IC:::::C A:::::AAAAAAAAA:::::A I::::I A:::::AAAAAAAAA:::::A
C:::::C A:::::::::::::::::::::A I::::IC:::::C A:::::::::::::::::::::A I::::I A:::::::::::::::::::::A
C:::::C CCCCCC A:::::AAAAAAAAAAAAA:::::A I::::I C:::::C CCCCCC A:::::AAAAAAAAAAAAA:::::A I::::I A:::::AAAAAAAAAAAAA:::::A
C:::::CCCCCCCC::::C A:::::A A:::::A II::::::IIC:::::CCCCCCCC::::C A:::::A A:::::A II::::::II A:::::A A:::::A
CC:::::::::::::::C A:::::A A:::::A I::::::::I CC:::::::::::::::C A:::::A A:::::A I::::::::I A:::::A A:::::A
CCC::::::::::::C A:::::A A:::::A I::::::::I CCC::::::::::::C A:::::A A:::::A I::::::::I A:::::A A:::::A
CCCCCCCCCCCCCAAAAAAA AAAAAAAIIIIIIIIII CCCCCCCCCCCCCAAAAAAA AAAAAAAIIIIIIIIIIAAAAAAA AAAAAAA
*/