#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");
}
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;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtYXhOID0gMTAwMDEwOwp2ZWN0b3I8aW50PiBhW21heE5dOwp2ZWN0b3I8aW50PiB4OwppbnQgbWFya1ttYXhOXTsKaW50IHZhbHVlW21heE5dOwppbnQgbWluaT0xMDAwMDAwMDsKCnZvaWQgZGZzKGludCB1KQp7CiAgICBtYXJrW3VdPTE7CglpZih2YWx1ZVt1XSA8IG1pbmkgJiYgdmFsdWVbdV0+PTApCgltaW5pPSB2YWx1ZVt1XTsKCglmb3IoaW50IGk9YVt1XS5zaXplKCk7aS0tOykKCXsKCQlpbnQgdj1hW3VdW2ldOwoJCWlmKCFtYXJrW3ZdKSBkZnModik7Cgl9Cn0KCmludCBtYWluKCkKewoJCWludCBuLG0sZmxhZz0wLG1pbng9MDsKCQlzY2FuZigiJWQlZCIsJm4sJm0pOwoKCQlpbnQgaSx1LHY7CgkJbG9uZyBsb25nIHN1bT0wOwoJCWZvcihpPTA7aTxuO2krKykgewoJCSAgICBhW2ldLmNsZWFyKCk7CgkJICAgIG1hcmtbaV09MDsKCQl9CgkJZm9yKGludCBrPTA7azxtO2srKykKCQl7CgkJCXNjYW5mKCIlZCVkIiwmdSwmdik7CgkJCWFbdS0xXS5wdXNoX2JhY2sodi0xKTsKCQkJYVt2LTFdLnB1c2hfYmFjayh1LTEpOwoJCX0KCQlmb3IoaT0wO2k8bjtpKyspIHNjYW5mKCIlZCIsJnZhbHVlW2ldKTsKCgkJZm9yKGk9MDtpPG47aSsrKQoJCXsKCQkJaWYoIW1hcmtbaV0pCgkJCXsKICAgICAgICAgICAgICAgIG1pbmk9MTAwMDAwMDA7CgkJCQlkZnMoaSk7CgkJCQlpZihtaW5pPT0xMDAwMDAwMCkKCQkJCWZsYWc9MTsKCQkJCWVsc2UKICAgICAgICAgICAgICAgIHgucHVzaF9iYWNrKG1pbmkpOwoJCQl9CgkJfQoKICAgICAgICBpZihmbGFnPT0xKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCItMVxuIik7CiAgICAgICAgfQoKICAgICAgICBpZih4LnNpemUoKTwyKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCIwXG4iKTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgICAgICAgZm9yKGk9MDtpPHguc2l6ZSgpO2krKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3VtPSBzdW0rIHhbaV07CiAgICAgICAgICAgICAgICBpZih4W2ldPG1pbngpbWlueD0geFtpXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3VtKz0gKHguc2l6ZSgpLTIpKm1pbng7CiAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIixzdW0pOwoKCXJldHVybiAwOwp9Cgo=