output_description: Print the minimum total cost required to make the forest connected, or print
  `Impossible` if it is impossible.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
      a_0 a_1 .. a_{N-1}
      x_1 y_1
      x_2 y_2
      :
      x_M y_M
attempt: def a():
      x, y = map(int, input().split())
  
  
  def b():
      import numpy as np
  
      n = int(input())
      a = np.asarray(list(map(int, input().split())))
      b = np.asarray(list(map(int, input().split())))
      x = b.sum() - a.sum()
      d = b - a
      a_req = 0
      b_req = 0
      for i in d:
          if i <= 0:
              b_req += i // -1
          else:
              a_req += i // 2 + i % 2
              b_req += i % 2
      # total require
      if (a_req >= b_req and (0 < a_req + (a_req - b_req) == x)) or (
          a_req == 0 and b_req == 0
      ):
          print("Yes")
      else:
          print("No")
  
  
  def d():
      n, m = map(int, input().split())
      a = list(map(int, input().split()))
      G = []
      for _ in range(m):
          s = set(map(int, input().split()))
          for S in G:
              if s & S:
                  s |= S
          G = [i for i in G if not s >= i]
          G.append(s)
      G = [sorted([a[i] for i in S], reverse=True) for S in G]
      # 見なしのv, e
      _v = len(G)
      _e = _v - 1
      e = _e * 2
      cost = 0
      tmp = []
      for D in G:
          cost += D.pop()
          tmp += D
      tbd = e - _v
      cost += sum(sorted(tmp[:tbd]))
      print(cost)
  
  
  if __name__ == "__main__":
      d()
  
problem_description: Statement
  
  You are given a forest with N vertices and M edges. The vertices are numbered
  0 through N-1. The edges are given in the format (x_i,y_i), which means that
  Vertex x_i and y_i are connected by an edge.
  
  Each vertex i has a value a_i. You want to add edges in the given forest so
  that the forest becomes connected. To add an edge, you choose two different
  vertices i and j, then span an edge between i and j. This operation costs a_i
  + a_j dollars, and afterward neither Vertex i nor j can be selected again.
  
  Find the minimum total cost required to make the forest connected, or print
  `Impossible` if it is impossible.
samples: [{"input": "7 5\n    1 2 3 4 5 6 7\n    3 0\n    4 0\n    1 2\n    1 3\n    5 6", "output": "7\n    \n\nIf we connect vertices 0 and 5, the graph becomes connected, for the cost of 1\n+ 6 = 7 dollars.\n\n* * *"}, {"input": "5 0\n    3 1 4 1 5", "output": "Impossible\n    \n\nWe can't make the graph connected.\n\n* * *"}, {"input": "1 0\n    5", "output": "0\n    \n\nThe graph is already connected, so we do not need to add any edges."}]