#include <bits/stdc++.h>
#define ll long long
#define INF 1000000005
#define MOD 1000000007
#define EPS 1e-10
#define rep(i,n) for(int i=0;i<(int)n;++i)

using namespace std;

typedef pair<int,int>P;

const int MAX_N = 100005;

set<int> G[MAX_N];
set<int> nG[MAX_N];
bool flag[MAX_N];
int w[MAX_N];
int n,m,opt;

void dfs(int s,int cost)
{
    if(nG[s].size() == 0){
        if(opt < cost){
            opt = cost;
        }
        return;
    }
    for(auto it = nG[s].begin(); it != nG[s].end() ;it++){
        dfs(*it,cost+w[(*it)]);
    }
    return;
}

int main()
{
	scanf("%d%d",&n,&m);
	rep(i,n){
		scanf("%d",&w[i]);
	}
    rep(i,m){
        int x,y;
        scanf("%d%d",&x,&y);
        G[x-1].insert(y-1);
        G[y-1].insert(x-1);
    }
    rep(i,n){
        flag[i] = false;
    }
    queue<P> que;
    for(int i=1;i<n;i++){
        if(G[i].size() == 1){
            flag[i] = true;
            if(*G[i].begin() == 0){
                nG[0].insert(i);
                continue;
            }
            G[*G[i].begin()].erase(i);
            if(G[*G[i].begin()].size() == 1){
                que.push(P(*G[i].begin(),i));
                flag[*G[i].begin()] = true;
                nG[*G[i].begin()].insert(i);
            }else{
                nG[*G[i].begin()].insert(i);
            }
        }
    }
    while(!que.empty()){
        P p = que.front();
        int u = p.first;
        que.pop();
        if(*G[u].begin() == 0){
            nG[0].insert(u);
            continue;
        }
        G[*G[u].begin()].erase(u);
        if(G[*G[u].begin()].size() == 1){
            que.push(P(*G[u].begin(),u));
            flag[*G[u].begin()] = true;
            nG[*G[u].begin()].insert(u);
        }else{
            nG[*G[u].begin()].insert(u);
        }
    }
    for(int i=1;i<n;i++){
        if(!flag[i]){
            if(nG[i].size() > 0){
                for(auto it = nG[i].begin(); it != nG[i].end() ;it++){
                    nG[0].insert(*it);
                }
                nG[i].clear();
            }
        }
    }
    int res = 0;
    for(int i = 1;i < n;i++){
        if(!flag[i]){
            res += w[i];
        }
    }
    dfs(0,w[0]);
    res += opt;
    printf("%d\n",res);
	return 0;
}