#include <cstdio>
#include<algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int maxN = 100010;
vector<int> a[maxN];
vector<int> x;
int mark[maxN];
int value[maxN];
int mini=10000000;
void dfs(int u)
{
mark[u]=1;
if(value[u] < mini && value[u]>=0)
mini= value[u];
for(int i=a[u].size();i--;)
{
int v=a[u][i];
if(!mark[v]) dfs(v);
}
}
int main()
{
int n,m,flag=0,minx=0;
scanf("%d%d",&n,&m);
int i,u,v;
long long sum=0;
for(i=0;i<n;i++) {
a[i].clear();
mark[i]=0;
}
for(int k=0;k<m;k++)
{
scanf("%d%d",&u,&v);
a[u-1].push_back(v-1);
a[v-1].push_back(u-1);
}
for(i=0;i<n;i++) scanf("%d",&value[i]);
for(i=0;i<n;i++)
{
if(!mark[i])
{
mini=10000000;
dfs(i);
if(mini==10000000)
flag=1;
else
x.push_back(mini);
}
}
if(flag==1)
{
printf("-1\n");
return 0;
}
if(x.size()<2)
{
printf("0\n");
return 0;
}
for(i=0;i<x.size();i++)
{
sum= sum+ x[i];
if(x[i]<minx)minx= x[i];
}
sum+= (x.size()-2)*minx;
printf("%lld\n",sum);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApjb25zdCBpbnQgbWF4TiA9IDEwMDAxMDsKdmVjdG9yPGludD4gYVttYXhOXTsKdmVjdG9yPGludD4geDsKaW50IG1hcmtbbWF4Tl07CmludCB2YWx1ZVttYXhOXTsKaW50IG1pbmk9MTAwMDAwMDA7CiAKdm9pZCBkZnMoaW50IHUpCnsKICAgIG1hcmtbdV09MTsKICAgICAgICBpZih2YWx1ZVt1XSA8IG1pbmkgJiYgdmFsdWVbdV0+PTApCiAgICAgICAgbWluaT0gdmFsdWVbdV07CiAKICAgICAgICBmb3IoaW50IGk9YVt1XS5zaXplKCk7aS0tOykKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgdj1hW3VdW2ldOwogICAgICAgICAgICAgICAgaWYoIW1hcmtbdl0pIGRmcyh2KTsKICAgICAgICB9Cn0KIAppbnQgbWFpbigpCnsKICAgICAgICAgICAgICAgIGludCBuLG0sZmxhZz0wLG1pbng9MDsKICAgICAgICAgICAgICAgIHNjYW5mKCIlZCVkIiwmbiwmbSk7CiAKICAgICAgICAgICAgICAgIGludCBpLHUsdjsKICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBzdW09MDsKICAgICAgICAgICAgICAgIGZvcihpPTA7aTxuO2krKykgewogICAgICAgICAgICAgICAgICAgIGFbaV0uY2xlYXIoKTsKICAgICAgICAgICAgICAgICAgICBtYXJrW2ldPTA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IoaW50IGs9MDtrPG07aysrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzY2FuZigiJWQlZCIsJnUsJnYpOwogICAgICAgICAgICAgICAgICAgICAgICBhW3UtMV0ucHVzaF9iYWNrKHYtMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFbdi0xXS5wdXNoX2JhY2sodS0xKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvcihpPTA7aTxuO2krKykgc2NhbmYoIiVkIiwmdmFsdWVbaV0pOwogCiAgICAgICAgICAgICAgICBmb3IoaT0wO2k8bjtpKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFtYXJrW2ldKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtaW5pPTEwMDAwMDAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmcyhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtaW5pPT0xMDAwMDAwMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnPTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgeC5wdXNoX2JhY2sobWluaSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KIAogICAgICAgIGlmKGZsYWc9PTEpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIi0xXG4iKTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogCiAgICAgICAgaWYoeC5zaXplKCk8MikKICAgICAgICB7CiAgICAgICAgICAgIHByaW50ZigiMFxuIik7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KIAogICAgICAgICAgICBmb3IoaT0wO2k8eC5zaXplKCk7aSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdW09IHN1bSsgeFtpXTsKICAgICAgICAgICAgICAgIGlmKHhbaV08bWlueCltaW54PSB4W2ldOwogICAgICAgICAgICB9CiAKICAgICAgICAgICAgc3VtKz0gKHguc2l6ZSgpLTIpKm1pbng7CiAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIixzdW0pOwogCiAgICAgICAgcmV0dXJuIDA7Cn0=