from atcoder.scc import SCCGraph from atcoder.dsu import DSU def main(): n, m = list(map(int, input().split())) A = list(map(int, input().split())) node = [[] for _ in range(n)] for _ in range(m): u, v = list(map(lambda x: int(x)-1, input().split())) node[u].append((v, A[v])) node[v].append((u, A[u])) inf = 1<<60 ans = 0 for _ in range(18): X = [0] * n Y = [0] * n scc = SCCGraph(n) uf = DSU(n) for u in range(n): for v, w in node[u]: if X[u] < w: X[u] = w Y[u] = v if X[u] != 0: uf.merge(u, Y[u]) scc.add_edge(u, Y[u]) G = scc.scc() G.sort(key = lambda x: -len(x)) while G and len(G[-1]) == 1: u = G.pop()[0] ans += X[u] m = len(G) N = [-1] * n Z = [inf] * m for mi in range(m): for u in G[mi]: ans += X[u] Z[mi] = min(Z[mi], X[u]) N[u] = mi ans -= Z[mi] for u in G[mi]: X[u] -= Z[mi] nnode = [[] for _ in range(m+1)] for u in range(n): if N[u] == -1: continue for v, w in node[u]: if uf.same(u, v): continue w -= X[u] if w <= 0: continue if N[v] == -1: nnode[N[u]].append((m, w)) elif N[u] != N[v]: nnode[N[u]].append((N[v], w)) node = nnode n = m+1 return ans for _ in range(int(input())): print(main())