#include<bits/stdc++.h>
using namespace std;
const long long maxn=2e6+99,maxm=2e6*2+12;
long long n,m,q;
long long dianpuan[maxn];
struct P{
long long f,t,n;
}edge_old[2*maxm];
long long head_old[maxn],l_old;
stack<int> p;
long long dfn[maxn],low[maxn],belong[maxn],tme,tot,power[maxn];
void tarjain(long long s,long long fa){
p.push(s);
dfn[s]=low[s]=++tme;
for(long long i=head_old[s];i;i=edge_old[i].n){
long long t=edge_old[i].t;
if(t==fa) continue;
if(dfn[t]==0){
tarjain(t,s);
low[s]=min(low[s],low[t]);
}
else low[s]=min(dfn[t],low[s]);
}
if(dfn[s]==low[s]){
long long q;
tot++;
while(1){
q=p.top();
p.pop();
belong[q]=tot;
power[tot]+=dianpuan[q];
if(q==s) break;
}
}
}
P edge[2*maxm];
long long head[maxn],l;
inline void build(){
for(long long i=1;i<=m;i++){
long long f=belong[edge_old[i].f],t=belong[edge_old[i].t];
if(f==t) continue;
l++,edge[l]=(P){f,t,head[f]},head[f]=l;
}
}
long long C[maxn];
long long lca[maxn][31],dep[maxn];
void dfs(long long s,long long fa){
dep[s]=dep[fa]+1;
for(long long i=1;(i<<1)<=dep[s];i++) lca[s][i]=lca[lca[s][i-1]][i-1];
for(long long i=head[s];i;i=edge[i].n){
long long t=edge[i].t;
if(t==fa) continue;
lca[t][0]=s;
dfs(t,s);
}
}
long long getlca(long long a,long long b){
if(dep[a]>dep[b]) swap(a,b);
long long len=dep[b]-dep[a],k=0;
while(len){
if(len&1) a=lca[a][k];
len=(len>>1),k++;
}
if(a==b) return a;
for(long long i=30;i>=0;i--){
if(lca[a][i]!=lca[b][i]){
a=lca[a][i],b=lca[b][i];
}
}
return lca[a][0];
}
long long ans;
void sjans(long long s,long long fa){
for(long long i=head[s];i;i=edge[i].n){
long long t=edge[i].t;
if(t==fa) continue;
sjans(t,s);
C[s]+=C[t];
}
if(C[s]) ans+=power[s];
// cout<<s<<" "<<C[s]<<" "<<power[s]<<" "<<ans<<" "<<"FGHJ"<<endl;
}
inline void read(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++) scanf("%lld",&dianpuan[i]);
for(int i=1;i<=m;i++){
long long f,t;
scanf("%lld%lld",&f,&t);
l_old++,edge_old[l_old]=(P){f,t,head_old[f]},head_old[f]=l_old;
l_old++,edge_old[l_old]=(P){t,f,head_old[t]},head_old[t]=l_old;
}
tarjain(1,0);
build();
dep[belong[1]]=1;
dfs(belong[1],0);
scanf("%lld",&q);
for(long long i=1;i<=q;i++){
long long f,t;
scanf("%lld%lld",&f,&t);
C[belong[f]]++;
C[belong[t]]++;
long long c=getlca(belong[f],belong[t]);
// cout<<c<<endl;
C[c]--,C[lca[c][0]]--;
}
sjans(belong[1],0);
// cout<<tot;
// for(long long i=1;i<=n;i++) cout<<i<<" "<<belong[i]<<"KKK"<<endl;
// for(long long i=1;i<=tot;i++) cout<<i<<" "<<power[i]<<"QQQ"<<endl;
// for(long long i=1;i<=tot;i++) cout<<C[i]<<endl;
printf("%lld",ans);
}
int main (){
read();
}