#include <bits/stdc++.h>
using namespace std;
const int MX = 1e5 + 5;
const int INF = 1e9 + 5;
typedef signed long long ll;
int set_size, p[MX], r[MX], mn_val[MX], cost[MX];
void init(int n){
set_size = n;
for(int i = 0; i <= n; i++){
p[i] = i;
r[i] = 0;
mn_val[i] = cost[i];
}
}
int find_set(int i){
return (p[i] == i) ? i : p[i] = find_set(p[i]);
}
void union_set(int i, int j){
int x = find_set(i), y = find_set(j);
if(x != y){
set_size--;
if(r[x] > r[y]){
p[y] = x;
mn_val[x] = min(mn_val[x], mn_val[y]);
}else{
p[x] = y;
mn_val[y] = min(mn_val[x], mn_val[y]);
if(r[x] == r[y]) r[y]++;
}
}
}
bool cmp(int a, int b){
return a > b;
}
int main() {
int n, m, u, v;
for(; scanf("%d %d", &n, &m) == 2 ;){
vector<pair<int,int> > con;
for(int i = 1; i <= m; i++){
scanf("%d %d", &u, &v);
con.push_back(make_pair(u, v));
}
for(int i = 1; i <= n; i++){
scanf("%d", &u);
cost[i] = u;
if(u < 0) cost[i] = INF;
}
init(n);
for(int i = 0; i < m; i++){
u = con[i].first, v = con[i].second;
union_set(u, v);
}
map<int, int> mp;
for(int i = 1; i <= n; i++){
int par = find_set(i);
int val = mn_val[par];
mp[par] = val;
}
map<int, int>:: iterator it;
bool ok = false;
int sum = 0, mn = INF;
for(it = mp.begin(); it != mp.end(); it++){
int num = it->second;
if(num == INF) ok = true;
sum += num;
mn = min(mn, num);
}
(ok) ? printf("-1\n") : printf("%d\n", mn * (set_size - 1) + sum - mn);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTVggPSAxZTUgKyA1Owpjb25zdCBpbnQgSU5GID0gMWU5ICsgNTsKdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGxsOwppbnQgc2V0X3NpemUsIHBbTVhdLCByW01YXSwgbW5fdmFsW01YXSwgY29zdFtNWF07Cgp2b2lkIGluaXQoaW50IG4pewoJc2V0X3NpemUgPSBuOwoJZm9yKGludCBpID0gMDsgaSA8PSBuOyBpKyspewoJCXBbaV0gPSBpOwoJCXJbaV0gPSAwOwoJCW1uX3ZhbFtpXSA9IGNvc3RbaV07Cgl9Cn0KCmludCBmaW5kX3NldChpbnQgaSl7CglyZXR1cm4gKHBbaV0gPT0gaSkgPyBpIDogcFtpXSA9IGZpbmRfc2V0KHBbaV0pOwp9Cgp2b2lkIHVuaW9uX3NldChpbnQgaSwgaW50IGopewoJaW50IHggPSBmaW5kX3NldChpKSwgeSA9IGZpbmRfc2V0KGopOwoJaWYoeCAhPSB5KXsKCQlzZXRfc2l6ZS0tOwoJCWlmKHJbeF0gPiByW3ldKXsKCQkJcFt5XSA9IHg7CgkJCW1uX3ZhbFt4XSA9IG1pbihtbl92YWxbeF0sIG1uX3ZhbFt5XSk7CgkJfWVsc2V7CgkJCXBbeF0gPSB5OwoJCQltbl92YWxbeV0gPSBtaW4obW5fdmFsW3hdLCBtbl92YWxbeV0pOwoJCQlpZihyW3hdID09IHJbeV0pIHJbeV0rKzsKCQl9Cgl9Cn0KCmJvb2wgY21wKGludCBhLCBpbnQgYil7CglyZXR1cm4gYSA+IGI7Cn0KCmludCBtYWluKCkgewoJaW50IG4sIG0sIHUsIHY7Cglmb3IoOyBzY2FuZigiJWQgJWQiLCAmbiwgJm0pID09IDIgOyl7CgkJdmVjdG9yPHBhaXI8aW50LGludD4gPiBjb247CgkJCgkJZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspewoJCQlzY2FuZigiJWQgJWQiLCAmdSwgJnYpOwoJCQljb24ucHVzaF9iYWNrKG1ha2VfcGFpcih1LCB2KSk7CgkJfQoJCQoJCWZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKCQkJc2NhbmYoIiVkIiwgJnUpOwoJCQljb3N0W2ldID0gdTsKCQkJaWYodSA8IDApIGNvc3RbaV0gPSBJTkY7CgkJfQoJCQoJCWluaXQobik7CgkJCgkJZm9yKGludCBpID0gMDsgaSA8IG07IGkrKyl7CgkJCXUgPSBjb25baV0uZmlyc3QsIHYgPSBjb25baV0uc2Vjb25kOwoJCQl1bmlvbl9zZXQodSwgdik7CgkJfQoJCQoJCW1hcDxpbnQsIGludD4gbXA7CgkJZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewoJCQlpbnQgcGFyID0gZmluZF9zZXQoaSk7CgkJCWludCB2YWwgPSBtbl92YWxbcGFyXTsKCQkJCgkJCW1wW3Bhcl0gPSB2YWw7CgkJfQoJCQoJCW1hcDxpbnQsIGludD46OiBpdGVyYXRvciBpdDsKCQlib29sIG9rID0gZmFsc2U7CgkJaW50IHN1bSA9IDAsIG1uID0gSU5GOwoJCQoJCWZvcihpdCA9IG1wLmJlZ2luKCk7IGl0ICE9IG1wLmVuZCgpOyBpdCsrKXsKCQkJaW50IG51bSA9IGl0LT5zZWNvbmQ7CgkJCWlmKG51bSA9PSBJTkYpIG9rID0gdHJ1ZTsKCQkJc3VtICs9IG51bTsKCQkJbW4gPSBtaW4obW4sIG51bSk7CgkJfQoJCQoJCShvaykgPyBwcmludGYoIi0xXG4iKSA6IHByaW50ZigiJWRcbiIsIG1uICogKHNldF9zaXplIC0gMSkgKyBzdW0gLSBtbik7Cgl9CglyZXR1cm4gMDsKfQ==