#include<iostream>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define max 1000001
typedef long long int ll;
vector<ll> v1[max];
bool visit[max];
map<ll,ll> cost;
ll s1[max];
ll n,m,mincost,last=0,city;
void dfs(ll src)
{
visit[src]=1;
int i;
for(i=0;i<v1[src].size();i++)
{
if(visit[v1[src][i]]==0)
dfs(v1[src][i]);
}
city++;
if((cost[src]>=0 && mincost> cost[src]) )
mincost=cost[src];
}
bool dfs_visit(int n)
{
int i;
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
city=0;
mincost=max;
dfs(i);
if(mincost==max && city<n)
{
cout<<"-1"<<endl; return false;
}
s1[last++] = mincost;
}
}
return true;
}
int main()
{
cin>>n>>m;
ll a,b,i;
bool iso;
for(i=1;i<=n;i++)
{
v1[i].clear();
visit[i]=0;
s1[i]=0;
}
while(m--)
{
cin>>a>>b;
v1[a].push_back(b);
v1[b].push_back(a);
}
for(i=1;i<=n;i++)
cin>>cost[i];
iso=dfs_visit(n);
if(iso==false)
return 0;
ll sum=0;
mincost=max;
for(i=0;i<last;i++)
{
sum+= s1[i];
if(mincost>s1[i])
mincost=s1[i];
}
//cout<<"sum is "<<sum<<endl;
sum+= (last-2)*mincost;
cout<<sum<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8bWFwPgojaW5jbHVkZTxzZXQ+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIG1heCAxMDAwMDAxCgp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CnZlY3RvcjxsbD4gdjFbbWF4XTsKYm9vbCB2aXNpdFttYXhdOwptYXA8bGwsbGw+IGNvc3Q7CgpsbCBzMVttYXhdOwoKbGwgbixtLG1pbmNvc3QsbGFzdD0wLGNpdHk7Cgp2b2lkIGRmcyhsbCBzcmMpCnsKIHZpc2l0W3NyY109MTsKIGludCBpOwogIAogIGZvcihpPTA7aTx2MVtzcmNdLnNpemUoKTtpKyspCiAgewogICAgaWYodmlzaXRbdjFbc3JjXVtpXV09PTApCiAgICAgZGZzKHYxW3NyY11baV0pOwogIH0KICBjaXR5Kys7CiAgaWYoKGNvc3Rbc3JjXT49MCAmJiBtaW5jb3N0PiBjb3N0W3NyY10pICApIAogICBtaW5jb3N0PWNvc3Rbc3JjXTsKfQoKYm9vbCBkZnNfdmlzaXQoaW50IG4pCnsKaW50IGk7CiBmb3IoaT0xO2k8PW47aSsrKQogewogIGlmKHZpc2l0W2ldPT0wKQogIHsKICBjaXR5PTA7CiAgIG1pbmNvc3Q9bWF4OwogICBkZnMoaSk7CiAgIGlmKG1pbmNvc3Q9PW1heCAmJiBjaXR5PG4pCiAgICAgIHsKICAgICAgCWNvdXQ8PCItMSI8PGVuZGw7IHJldHVybiBmYWxzZTsKICAgICAgfQogICBzMVtsYXN0KytdID0gbWluY29zdDsKICB9CiB9CQogCiByZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKQp7CmNpbj4+bj4+bTsKbGwgYSxiLGk7CmJvb2wgaXNvOwoKZm9yKGk9MTtpPD1uO2krKykKewp2MVtpXS5jbGVhcigpOwp2aXNpdFtpXT0wOwpzMVtpXT0wOwp9Cgp3aGlsZShtLS0pCnsKY2luPj5hPj5iOwp2MVthXS5wdXNoX2JhY2soYik7CnYxW2JdLnB1c2hfYmFjayhhKTsKfQoKZm9yKGk9MTtpPD1uO2krKykKY2luPj5jb3N0W2ldOwoKaXNvPWRmc192aXNpdChuKTsKCmlmKGlzbz09ZmFsc2UpCnJldHVybiAwOwoKbGwgc3VtPTA7Cm1pbmNvc3Q9bWF4OwoKZm9yKGk9MDtpPGxhc3Q7aSsrKQp7CnN1bSs9IHMxW2ldOwppZihtaW5jb3N0PnMxW2ldKQogbWluY29zdD1zMVtpXTsKfQovL2NvdXQ8PCJzdW0gaXMgIjw8c3VtPDxlbmRsOwpzdW0rPSAobGFzdC0yKSptaW5jb3N0Owpjb3V0PDxzdW08PGVuZGw7CgpyZXR1cm4gMDsKfQ==