def chmin(l, i, v):
  if l[i] > v:
    l[i] = v
    return True
  return False

def main():
    N, M = map(int, input().split())
    keys = []
    for i in range(M):
        a, b = map(int, input().split())
        C = map(int, input().split())
        # mask: nビット目が1なら、n番目のカギを開けられる
        mask = 0
        for c in C:
            mask |= 1 << (c-1)
        keys.append((a, mask))
    
    # N 個のカギを選ぶ、選ばないのパターンを考えると、その組み合わせは2^N 通り
    # コスト無限大で初期化
    patterns = 1 << N
    INF = float("inf")
    # dp[i]: iのnビット目が1なら、n番目のカギを開けられて、その開けられるカギの組み合わせでの最安値を示している
    # 例: dp[3]: 1番目と2番目のカギをあけたいときの最安値
    dp = [ INF ] * patterns
    dp[0] = 0

    # 計算量: O(2^N * M) => 最大でも 4096 * 10^3 ~= 10^6
    for a, mask in keys:
        for i in range(patterns):
            chmin(dp, i|mask, dp[i] + a)

    ans = dp[patterns-1]
    print(-1 if ans == INF else ans)

if __name__ == '__main__':
    main() def chmin(l, i, v):
  if l[i] > v:
    l[i] = v
    return True
  return False chmin if l[i] > v:
    l[i] = v
    return True
   l[i] > v l[i] l i v l[i] = v l[i] l i v return True True return False False l l i i v v def main():
    N, M = map(int, input().split())
    keys = []
    for i in range(M):
        a, b = map(int, input().split())
        C = map(int, input().split())
        # mask: nビット目が1なら、n番目のカギを開けられる
        mask = 0
        for c in C:
            mask |= 1 << (c-1)
        keys.append((a, mask))
    
    # N 個のカギを選ぶ、選ばないのパターンを考えると、その組み合わせは2^N 通り
    # コスト無限大で初期化
    patterns = 1 << N
    INF = float("inf")
    # dp[i]: iのnビット目が1なら、n番目のカギを開けられて、その開けられるカギの組み合わせでの最安値を示している
    # 例: dp[3]: 1番目と2番目のカギをあけたいときの最安値
    dp = [ INF ] * patterns
    dp[0] = 0

    # 計算量: O(2^N * M) => 最大でも 4096 * 10^3 ~= 10^6
    for a, mask in keys:
        for i in range(patterns):
            chmin(dp, i|mask, dp[i] + a)

    ans = dp[patterns-1]
    print(-1 if ans == INF else ans) main N, M = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split M keys = [] keys [] for i in range(M):
        a, b = map(int, input().split())
        C = map(int, input().split())
        # mask: nビット目が1なら、n番目のカギを開けられる
        mask = 0
        for c in C:
            mask |= 1 << (c-1)
        keys.append((a, mask))
    
    # N 個のカギを選ぶ、選ばないのパターンを考えると、その組み合わせは2^N 通り
    # コスト無限大で初期化
     i range(M) range M a, b = map(int, input().split()) a map(int, input().split()) map int input().split() ().split () input split b C = map(int, input().split()) C map(int, input().split()) map int input().split() ().split () input split mask = 0 mask 0 for c in C:
            mask |= 1 << (c-1)
         c C mask |= 1 << (c-1) mask 1 << (c-1) 1 c-1 c 1 keys.append((a, mask)) keys.append keys append (a, mask) a mask patterns = 1 << N patterns 1 << N 1 N INF = float("inf") INF float("inf") float "inf" dp = [ INF ] * patterns dp [ INF ] * patterns [ INF ] INF patterns dp[0] = 0 dp[0] dp 0 0 for a, mask in keys:
        for i in range(patterns):
            chmin(dp, i|mask, dp[i] + a)

     a mask keys for i in range(patterns):
            chmin(dp, i|mask, dp[i] + a)

     i range(patterns) range patterns chmin(dp, i|mask, dp[i] + a) chmin dp i|mask i mask dp[i] + a dp[i] dp i a ans = dp[patterns-1] ans dp[patterns-1] dp patterns-1 patterns 1 print(-1 if ans == INF else ans) print -1 if ans == INF else ans ans == INF ans INF -1 ans if __name__ == '__main__':
    main() __name__ == '__main__' __name__ '__main__' main() main def chmin(l, i, v):
  if l[i] > v:
    l[i] = v
    return True
  return False def chmin(l, i, v):
  if l[i] > v:
    l[i] = v
    return True
  return False chmin def main():
    N, M = map(int, input().split())
    keys = []
    for i in range(M):
        a, b = map(int, input().split())
        C = map(int, input().split())
        # mask: nビット目が1なら、n番目のカギを開けられる
        mask = 0
        for c in C:
            mask |= 1 << (c-1)
        keys.append((a, mask))
    
    # N 個のカギを選ぶ、選ばないのパターンを考えると、その組み合わせは2^N 通り
    # コスト無限大で初期化
    patterns = 1 << N
    INF = float("inf")
    # dp[i]: iのnビット目が1なら、n番目のカギを開けられて、その開けられるカギの組み合わせでの最安値を示している
    # 例: dp[3]: 1番目と2番目のカギをあけたいときの最安値
    dp = [ INF ] * patterns
    dp[0] = 0

    # 計算量: O(2^N * M) => 最大でも 4096 * 10^3 ~= 10^6
    for a, mask in keys:
        for i in range(patterns):
            chmin(dp, i|mask, dp[i] + a)

    ans = dp[patterns-1]
    print(-1 if ans == INF else ans) def main():
    N, M = map(int, input().split())
    keys = []
    for i in range(M):
        a, b = map(int, input().split())
        C = map(int, input().split())
        # mask: nビット目が1なら、n番目のカギを開けられる
        mask = 0
        for c in C:
            mask |= 1 << (c-1)
        keys.append((a, mask))
    
    # N 個のカギを選ぶ、選ばないのパターンを考えると、その組み合わせは2^N 通り
    # コスト無限大で初期化
    patterns = 1 << N
    INF = float("inf")
    # dp[i]: iのnビット目が1なら、n番目のカギを開けられて、その開けられるカギの組み合わせでの最安値を示している
    # 例: dp[3]: 1番目と2番目のカギをあけたいときの最安値
    dp = [ INF ] * patterns
    dp[0] = 0

    # 計算量: O(2^N * M) => 最大でも 4096 * 10^3 ~= 10^6
    for a, mask in keys:
        for i in range(patterns):
            chmin(dp, i|mask, dp[i] + a)

    ans = dp[patterns-1]
    print(-1 if ans == INF else ans) main
def chmin(l, i, v):
  if l[i] > v:
    l[i] = v
    return True
  return False

def main():
    N, M = map(int, input().split())
    keys = []
    for i in range(M):
        a, b = map(int, input().split())
        C = map(int, input().split())
        # mask: nビット目が1なら、n番目のカギを開けられる
        mask = 0
        for c in C:
            mask |= 1 << (c-1)
        keys.append((a, mask))
    
    # N 個のカギを選ぶ、選ばないのパターンを考えると、その組み合わせは2^N 通り
    # コスト無限大で初期化
    patterns = 1 << N
    INF = float("inf")
    # dp[i]: iのnビット目が1なら、n番目のカギを開けられて、その開けられるカギの組み合わせでの最安値を示している
    # 例: dp[3]: 1番目と2番目のカギをあけたいときの最安値
    dp = [ INF ] * patterns
    dp[0] = 0

    # 計算量: O(2^N * M) => 最大でも 4096 * 10^3 ~= 10^6
    for a, mask in keys:
        for i in range(patterns):
            chmin(dp, i|mask, dp[i] + a)

    ans = dp[patterns-1]
    print(-1 if ans == INF else ans)

if __name__ == '__main__':
    main()