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) node[v].append(u) inf = 1<<60 ans = 0 X = [A[i] for i in range(n)] Y = [-1 for _ in range(n)] uf = DSU(n) for _ in range(18): E = [] Z0 = [-1] * n Z1 = [0] * n for u in range(n): for v in node[u]: if uf.same(u, v): continue ui = uf.leader(u) vi = uf.leader(v) if Z1[ui] < A[v]+A[u]-X[ui]: Z1[ui] = A[v]+A[u]-X[ui] Z0[ui] = vi for u in range(n): if Z1[u] > 0: E.append((u, Z0[u], Z1[u])) E.sort(key = lambda x: -x[2]) for u, v, w in E: if not uf.same(u, v): ui, vi = uf.leader(u), uf.leader(v) uf.merge(u, v) X[uf.leader(u)] = max(X[ui], X[vi]) ans += w return ans for _ in range(int(input())): print(main())