#ABC142-E Get Everything
"""
宝箱の制約が12個なので、これの状態を集合とする.
全ての状態について、(これはdpテーブルの状態ではない)
全ての鍵について考え、
この2つの状態のorで得られる状態sのdpテーブルをcost最小値で更新
そのようにして得られるdp[-1]が答えで、
この時O(2^N*M)がだいたい60**6なのでギリok
"""
import sys
readline = sys.stdin.buffer.readline

n,m = map(int,readline().split())
INF = 10**10
cost_len_key = []
for i in range(m):
    a,b = map(int,readline().split())
    lst1 = list(map(int,readline().split()))
    res = 0
    for j in lst1:
        res += 1<<(j-1)
    cost_len_key.append([a,b,res])

#dp:状態s(か、s以上)の箱を開けた場合の最小コスト
dp = [INF for _ in range(1<<n)]
dp[0] = 0 #1つも開けていない状態はコスト0

for i in range(1<<n): #すべての状態について回す
    for j in cost_len_key: #すべての鍵について回す
        s = i|j[2] #状態=iの状態の宝箱が空いているときに、鍵jで追加して開ける時の状態
        dp[s] = min(dp[s],dp[i]+j[0]) #そのような状態の時のコストの最小値

ans = dp[-1] #全部の鍵が空いた時の最小コストが答え
if ans < INF:
    print(ans)
else:
    print(-1) """
宝箱の制約が12個なので、これの状態を集合とする.
全ての状態について、(これはdpテーブルの状態ではない)
全ての鍵について考え、
この2つの状態のorで得られる状態sのdpテーブルをcost最小値で更新
そのようにして得られるdp[-1]が答えで、
この時O(2^N*M)がだいたい60**6なのでギリok
""" import sys sys readline = sys.stdin.buffer.readline readline sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline n,m = map(int,readline().split()) n map(int,readline().split()) map int readline().split() ().split () readline split m INF = 10**10 INF 10**10 10 10 cost_len_key = [] cost_len_key [] for i in range(m):
    a,b = map(int,readline().split())
    lst1 = list(map(int,readline().split()))
    res = 0
    for j in lst1:
        res += 1<<(j-1)
    cost_len_key.append([a,b,res])

#dp:状態s(か、s以上)の箱を開けた場合の最小コスト i range(m) range m a,b = map(int,readline().split()) a map(int,readline().split()) map int readline().split() ().split () readline split b lst1 = list(map(int,readline().split())) lst1 list(map(int,readline().split())) list map(int,readline().split()) map int readline().split() ().split () readline split res = 0 res 0 for j in lst1:
        res += 1<<(j-1)
     j lst1 res += 1<<(j-1) res 1<<(j-1) 1 j-1 j 1 cost_len_key.append([a,b,res]) cost_len_key.append cost_len_key append [a,b,res] a b res INF for _ in range(1<<n) for _ in range(1<<n) _ range(1<<n) range 1<<n 1 n for _ in range(1<<n) INF dp = [INF for _ in range(1<<n)] dp [INF for _ in range(1<<n)] dp[0] = 0 dp[0] dp 0 0 for i in range(1<<n): #すべての状態について回す
    for j in cost_len_key: #すべての鍵について回す
        s = i|j[2] #状態=iの状態の宝箱が空いているときに、鍵jで追加して開ける時の状態
        dp[s] = min(dp[s],dp[i]+j[0]) #そのような状態の時のコストの最小値 i range(1<<n) range 1<<n 1 n for j in cost_len_key: #すべての鍵について回す
        s = i|j[2] #状態=iの状態の宝箱が空いているときに、鍵jで追加して開ける時の状態
        dp[s] = min(dp[s],dp[i]+j[0]) #そのような状態の時のコストの最小値 j cost_len_key s = i|j[2] s i|j[2] i j[2] j 2 dp[s] = min(dp[s],dp[i]+j[0]) dp[s] dp s min(dp[s],dp[i]+j[0]) min dp[s] dp s dp[i]+j[0] dp[i] dp i j[0] j 0 ans = dp[-1] ans dp[-1] dp -1 if ans < INF:
    print(ans)
else:
    print(-1) ans < INF ans INF print(ans) print ans print(-1) print -1 s = i|j[2] i|j[2] s lst1 = list(map(int,readline().split())) list(map(int,readline().split())) lst1 res = 0 0 res ans = dp[-1] dp[-1] ans cost_len_key = [] [] cost_len_key res += 1<<(j-1) 1<<(j-1) res dp = [INF for _ in range(1<<n)] [INF for _ in range(1<<n)] dp a,b = map(int,readline().split()) map(int,readline().split()) a m = map(int,readline().split()) map(int,readline().split()) m INF = 10**10 10**10 INF readline = sys.stdin.buffer.readline sys.stdin.buffer.readline readline n,m = map(int,readline().split()) map(int,readline().split()) n b = map(int,readline().split()) map(int,readline().split()) b
#ABC142-E Get Everything
"""
宝箱の制約が12個なので、これの状態を集合とする.
全ての状態について、(これはdpテーブルの状態ではない)
全ての鍵について考え、
この2つの状態のorで得られる状態sのdpテーブルをcost最小値で更新
そのようにして得られるdp[-1]が答えで、
この時O(2^N*M)がだいたい60**6なのでギリok
"""
import sys
readline = sys.stdin.buffer.readline

n,m = map(int,readline().split())
INF = 10**10
cost_len_key = []
for i in range(m):
    a,b = map(int,readline().split())
    lst1 = list(map(int,readline().split()))
    res = 0
    for j in lst1:
        res += 1<<(j-1)
    cost_len_key.append([a,b,res])

#dp:状態s(か、s以上)の箱を開けた場合の最小コスト
dp = [INF for _ in range(1<<n)]
dp[0] = 0 #1つも開けていない状態はコスト0

for i in range(1<<n): #すべての状態について回す
    for j in cost_len_key: #すべての鍵について回す
        s = i|j[2] #状態=iの状態の宝箱が空いているときに、鍵jで追加して開ける時の状態
        dp[s] = min(dp[s],dp[i]+j[0]) #そのような状態の時のコストの最小値

ans = dp[-1] #全部の鍵が空いた時の最小コストが答え
if ans < INF:
    print(ans)
else:
    print(-1)