def repr(uf, i):
    if uf[i] == i:
        return i
    uf[i] = repr(uf, uf[i])
    return uf[i]

def union(uf, val, i, j):
    ri = repr(uf, i)
    rj = repr(uf, j)

    uf[rj] = ri
    val[ri] = val[rj] = min(val[ri], val[rj])


def main():
    [n, k] = [int(i) for i in input().split()]
    a = [int(i) for i in input().split()]

    couples = [[int(i)-1 for i in input().split()] for _ in range(k)]

    uf = [i for i in range(n)]
    val = [a[i] for i in range(n)]

    for (i, j) in couples:
        ri = repr(uf, i)
        rj = repr(uf, j)
        if ri != rj:
            union(uf, val, i, j)

    mini = 0
    for i in range(n):
        if repr(uf, i) == i:
            mini += val[i]

    return mini


print(main())