WA plz corret me
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pi(x) cout<<x;
#define ps(x) cout<<x<<" β;
#define pnl(x) cout<<x<<β\n";
#define for0(n) for(i=0;i<n;i++)
#define for1(n) for(i=1;i<=n;i++)
#define m(x) memset(x,0,sizeof x);
#define nl cout<<"\n";
#define mp make_pair
#define pb push_back
#define fr first
#define se second
#define Inf 1e16
vectora[100009];
vectorb(100009);
ll dp[100009];
ll maxx=INT_MAX;
void dfs(ll v){
if(dp[v]){
return;
}
dp[v]=1;
if(b[v]>=0){
maxx=min(maxx,b[v]);
}
for(ll i=0;i<a[v].size();i++){
dfs(a[v][i]);
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ll test,i,j,xy,flag=0,n,u,count,d,o1=0,o2=0,s,e,l,r,x,y,m,z,max1,x1,y1,k,x2,y2,z1,sum,f,min1;
cin>>n>>m;
for(i=0;i<m;i++){
cin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
for(i=1;i<=n;i++){
cin>>b[i];
}
d=INT_MAX;
memset(dp,0,sizeof dp);
vectorans;
min1=INT_MAX;
for(i=1;i<=n;i++){
maxx=INT_MAX;
if(dp[i]==0){
dfs(i);
if(maxx==d){
cout<<"-1";
return 0;
}
ans.push_back(maxx);
min1=min(maxx,min1);
}
}
sum=0;
sort(ans.begin(),ans.end());
for(i=1;i<ans.size();i++){
sum+=ans[i]+ans[0];
}
cout<<sum<<"\n";
return 0;
}