#include<bits/stdc++.h>
#define ll long long
const int N = 521;
using namespace std;
int n, m;
int v[N];
int sz[N];
int f[521][521][3];
vector <int> G[N];
void dp (int u, int fa) {
sz[u] = 1;f[u][1][0] = v[u];f[u][1][1] = v[u];
for (auto v : G[u]) {
if (v == fa) continue;
dp(v, u);
sz[u] += sz[v];
for (int i = min (m,3*sz[u]); i; --i) {
for (int j = 1; j < min(m,3 * sz[v]); ++j) {
if (i - j - 2 >= 0) {
f[u][i][1] = max(f[u][i][1], f[v][j][0] + f[u][i - j - 2][1]);
f[u][i][0] = max(f[u][i][0], f[v][j][0] + f[u][i - j - 2][1]);
}
f[u][i][1] = max(f[u][i][1], f[v][j][1] + f[u][i - j - 1][0]);
}
}
}
}
int main() {
freopen("food.in","r",stdin);
freopen("food.out","w",stdout);
cin >> n >> m;
for (int i = 1;i <= n; ++i) cin >> v[i];
for (int i = 1; i <= m; ++i) {
int u, v; cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
int ans = 0;
dp(1, 0);
for (int i = 1; i <= n; ++i) ans = max ({ans,f[1][i][1],f[1][i][0]});
cout << ans;
return 0;
}