n,m = map(int,input().split())
dp = [0]+[10**8+10]*(2**n-1)
#len(dp)==16　（2**n）　扉の開閉状態
#dp: その開閉状態を実現するための鍵の値段の最小値

#それぞれの鍵について
for i in range(m):
  a,b = map(int,input().split())
  #x: 開く扉の番号
  #2**(1-1)==000000000001   2**(12-1)==100000000000
  #sは　100010111000みたいなやつ（その鍵で開く扉が１）
  s = sum([2**(x-1) for x in list(map(int,input().split()))])
  for j in range(2**n):
    #| : or
    #（ある状態＋その鍵を使って開けられるやつ）の状態　　もともとの数値か、鍵を使うか
    dp[j|s] = min(dp[j|s],dp[j]+a)
if dp[-1] <= 10**8:
  print(dp[-1])
else:
  print(-1)
 n,m = map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split m dp = [0]+[10**8+10]*(2**n-1) dp [0]+[10**8+10]*(2**n-1) [0] 0 [10**8+10]*(2**n-1) [10**8+10] 10**8+10 10**8 10 8 10 2**n-1 2**n 2 n 1 for i in range(m):
  a,b = map(int,input().split())
  #x: 開く扉の番号
  #2**(1-1)==000000000001   2**(12-1)==100000000000
  #sは　100010111000みたいなやつ（その鍵で開く扉が１）
  s = sum([2**(x-1) for x in list(map(int,input().split()))])
  for j in range(2**n):
    #| : or
    #（ある状態＋その鍵を使って開けられるやつ）の状態　　もともとの数値か、鍵を使うか
    dp[j|s] = min(dp[j|s],dp[j]+a) i range(m) range m a,b = map(int,input().split()) a map(int,input().split()) map int input().split() ().split () input split b 2**(x-1) for x in list(map(int,input().split())) for x in list(map(int,input().split())) x list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split for x in list(map(int,input().split())) 2**(x-1) 2 x-1 x 1 s = sum([2**(x-1) for x in list(map(int,input().split()))]) s sum([2**(x-1) for x in list(map(int,input().split()))]) sum [2**(x-1) for x in list(map(int,input().split()))] for j in range(2**n):
    #| : or
    #（ある状態＋その鍵を使って開けられるやつ）の状態　　もともとの数値か、鍵を使うか
    dp[j|s] = min(dp[j|s],dp[j]+a) j range(2**n) range 2**n 2 n dp[j|s] = min(dp[j|s],dp[j]+a) dp[j|s] dp j|s j s min(dp[j|s],dp[j]+a) min dp[j|s] dp j|s j s dp[j]+a dp[j] dp j a if dp[-1] <= 10**8:
  print(dp[-1])
else:
  print(-1) dp[-1] <= 10**8 dp[-1] dp -1 10**8 10 8 print(dp[-1]) print dp[-1] dp -1 print(-1) print -1 a,b = map(int,input().split()) map(int,input().split()) a dp = [0]+[10**8+10]*(2**n-1) [0]+[10**8+10]*(2**n-1) dp n,m = map(int,input().split()) map(int,input().split()) n m = map(int,input().split()) map(int,input().split()) m b = map(int,input().split()) map(int,input().split()) b s = sum([2**(x-1) for x in list(map(int,input().split()))]) sum([2**(x-1) for x in list(map(int,input().split()))]) s
n,m = map(int,input().split())
dp = [0]+[10**8+10]*(2**n-1)
#len(dp)==16　（2**n）　扉の開閉状態
#dp: その開閉状態を実現するための鍵の値段の最小値

#それぞれの鍵について
for i in range(m):
  a,b = map(int,input().split())
  #x: 開く扉の番号
  #2**(1-1)==000000000001   2**(12-1)==100000000000
  #sは　100010111000みたいなやつ（その鍵で開く扉が１）
  s = sum([2**(x-1) for x in list(map(int,input().split()))])
  for j in range(2**n):
    #| : or
    #（ある状態＋その鍵を使って開けられるやつ）の状態　　もともとの数値か、鍵を使うか
    dp[j|s] = min(dp[j|s],dp[j]+a)
if dp[-1] <= 10**8:
  print(dp[-1])
else:
  print(-1)

