n,m = list(map(int,input().split()))

dp = [1e9 for _ in range(2**n)]
#dp[status]
# status : c1c2c3...を開けることができる=1としたときの2進⇒10進数(maxは1がnこ並ぶから2**n -1)
dp[0] = 0
for i in range(1,m+1):
  a, _ = list(map(int,input().split()))
  C = list(map(int,input().split()))
  s = sum([2**(c-1) for c in C]) ## 内包forできれいに書いてる
  for j in range(2**n): ## ひとつ前のステータスを総当たりでいく
    dp[j|s] = min(dp[j|s], dp[j] + a)  ## このorの書き方が美しいのか

ans = dp[2**n-1] # 全部のカギを使ったときのstatusがすべて1の時
print(ans if ans < 1e9 else -1) n,m = list(map(int,input().split())) n list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split m 1e9 for _ in range(2**n) for _ in range(2**n) _ range(2**n) range 2**n 2 n for _ in range(2**n) 1e9 dp = [1e9 for _ in range(2**n)] dp [1e9 for _ in range(2**n)] dp[0] = 0 dp[0] dp 0 0 for i in range(1,m+1):
  a, _ = list(map(int,input().split()))
  C = list(map(int,input().split()))
  s = sum([2**(c-1) for c in C]) ## 内包forできれいに書いてる
  for j in range(2**n): ## ひとつ前のステータスを総当たりでいく
    dp[j|s] = min(dp[j|s], dp[j] + a)  ## このorの書き方が美しいのか i range(1,m+1) range 1 m+1 m 1 a, _ = list(map(int,input().split())) a list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split _ C = list(map(int,input().split())) C list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split 2**(c-1) for c in C for c in C c C for c in C 2**(c-1) 2 c-1 c 1 s = sum([2**(c-1) for c in C]) s sum([2**(c-1) for c in C]) sum [2**(c-1) for c in C] for j in range(2**n): ## ひとつ前のステータスを総当たりでいく
    dp[j|s] = min(dp[j|s], dp[j] + a)  ## このorの書き方が美しいのか 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 ans = dp[2**n-1] ans dp[2**n-1] dp 2**n-1 2**n 2 n 1 print(ans if ans < 1e9 else -1) print ans if ans < 1e9 else -1 ans < 1e9 ans 1e9 ans -1 C = list(map(int,input().split())) list(map(int,input().split())) C _ = list(map(int,input().split())) list(map(int,input().split())) _ m = list(map(int,input().split())) list(map(int,input().split())) m ans = dp[2**n-1] dp[2**n-1] ans n,m = list(map(int,input().split())) list(map(int,input().split())) n dp = [1e9 for _ in range(2**n)] [1e9 for _ in range(2**n)] dp a, _ = list(map(int,input().split())) list(map(int,input().split())) a s = sum([2**(c-1) for c in C]) sum([2**(c-1) for c in C]) s
n,m = list(map(int,input().split()))

dp = [1e9 for _ in range(2**n)]
#dp[status]
# status : c1c2c3...を開けることができる=1としたときの2進⇒10進数(maxは1がnこ並ぶから2**n -1)
dp[0] = 0
for i in range(1,m+1):
  a, _ = list(map(int,input().split()))
  C = list(map(int,input().split()))
  s = sum([2**(c-1) for c in C]) ## 内包forできれいに書いてる
  for j in range(2**n): ## ひとつ前のステータスを総当たりでいく
    dp[j|s] = min(dp[j|s], dp[j] + a)  ## このorの書き方が美しいのか

ans = dp[2**n-1] # 全部のカギを使ったときのstatusがすべて1の時
print(ans if ans < 1e9 else -1)