import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
static class Dsu{
int[]parent;
long[]maxVal;
public Dsu(int n,long[]a){
parent=new int[n+1];
maxVal=new long[n+1];
for (int i = 1; i <=n; i++) {
parent[i]=i;
maxVal[i]=a[i-1];
}
}
public int find(int x){
if(parent[x]==x) return x;
return parent[x]=find(parent[x]);
}
public void union(int x,int y){
int rootx=find(x);
int rooty=find(y);
if(rootx!=rooty){
parent[rootx]=rooty;
maxVal[rooty]=Math.max(maxVal[rootx], maxVal[rooty]);
}
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(),m=sc.nextInt();
long[]a=new long[n];
for (int i = 0; i < n; i++) {
a[i]=sc.nextLong();
}
Dsu dsu=new Dsu(n, a);
for (int i = 0; i < m; i++) {
int u=sc.nextInt();
int v=sc.nextInt();
dsu.union(u, v);
}
List<Long>list=new ArrayList<>();
for (int i = 1; i <=n; i++) {
if(dsu.parent[i]==i){
list.add(dsu.maxVal[i]);
}
}
if(list.size()<=1){
System.out.println(0);
}else{
Collections.sort(list);
long total=0;
for (int i = 1; i <list.size(); i++) {
total+=list.get(i);
}
System.out.println(total);
}
sc.close();
}
}