// Original C++ solution (slower):
#include<bits/stdc++.h>

#define ll long long

#define rep(i, n) for(int i=0;i<(n);++i)

#define per(i, n) for(int i=(n)-1;i>=0;--i)

#define repa(i, n) for(int i=1;i<(n);++i)

#define foreach(i, n) for(auto &i:(n))

#define pii pair<int, int>

#define pll pair<long long, long long>

#define all(x) (x).begin(), (x).end()

#define bit(x) (1ll << (x))

const ll MOD = (ll)1e9+7;

const int INF = (ll)2e9+7;

const ll INFLL = (ll)1e18;

using namespace std;

template<class t>

using vvector = vector<vector<t>>;

template<class t>

using vvvector = vector<vector<vector<t>>>;

template<class t, class u> bool chmax(t &a, u b){if(a<b){a=b;return true;}return false;}

template<class t, class u> bool chmin(t &a, u b){if(a>b){a=b;return true;}return false;}



ll modpow(ll x, ll b){

	ll res = 1;

	while(b){

		if(b&1)res = res * x % MOD;

		x = x * x % MOD;

		b>>=1;

	}

	return res;

}



ll modinv(ll x){

	return modpow(x, MOD-2);

}



void output(int d){

	static bool used = false;

	if(used)cout << " ";

	cout << d;

	used = true;

}



vvector<ll> dp(12, vector<ll>(bit(12), -1));



int main(){

	int n, m;

	cin >> n >> m;

	vector<ll> much(m);

	vector<ll> keys(m);

	rep(i, m){

		cin >> much[i];

		int d;

		cin >> d;

		rep(j, d){

			int dd;

			cin >> dd;

			keys[i] |= bit(dd-1);

		}

	}

	much.push_back(0);

	keys.push_back(0);

	++m;



	function<ll(int, int)> func = [&](int place, int bought){

		if(place==n){

			if(bought == (bit(n)-1))return 0ll;

			return INFLL;

		}

		if(dp[place][bought]>=0)return dp[place][bought];

		ll res = INFLL;

		rep(i, m){

			if(((bought|keys[i])&bit(place))==0)continue;

			chmin(res, much[i] + func(place+1, bought | keys[i]));

		}

		return dp[place][bought] = res;

	};

	

	ll ans = func(0, 0);

	if(ans>=INFLL){

		cout << -1 << endl;

	}else{

		cout << ans << endl;

	}



	return 0;

}


// Optimized solution to the same problem (faster):
#include<bits/stdc++.h>

#define rep(i,a,...) for(int i = (a)*(strlen(#__VA_ARGS__)!=0);i<(int)(strlen(#__VA_ARGS__)?__VA_ARGS__:(a));++i)

#define per(i,a,...) for(int i = (strlen(#__VA_ARGS__)?__VA_ARGS__:(a))-1;i>=(int)(strlen(#__VA_ARGS__)?(a):0);--i)

#define foreach(i, n) for(auto &i:(n))

#define pii pair<int, int>

#define pll pair<long long, long long>

#define all(x) (x).begin(), (x).end()

#define bit(x) (1ll << (x))

using ll = long long;

//const ll MOD = (ll)1e9+7;

const ll MOD = 998244353;

const int INF = (ll)1e9+7;

const ll INFLL = (ll)1e18;

using namespace std;

template<class t>

using vvector = vector<vector<t>>;

template<class t>

using vvvector = vector<vector<vector<t>>>;

template<class t>

using priority_queuer = priority_queue<t, vector<t>, greater<t>>;

template<class t, class u> bool chmax(t &a, u b){if(a<b){a=b;return true;}return false;}

template<class t, class u> bool chmin(t &a, u b){if(a>b){a=b;return true;}return false;}

#ifdef DEBUG

#define debug(x) cout<<"LINE "<<__LINE__<<": "<<#x<<" = "<<x<<endl;

#else

#define debug(x) (void)0

#endif



ll modpow(ll x, ll b){

  ll res = 1;

  while(b){

    if(b&1)res = res * x % MOD;

    x = x * x % MOD;

    b>>=1;

  }

  return res;

}



ll modinv(ll x){

  return modpow(x, MOD-2);

}



bool was_output = false;

template<class t>

void output(t a){

  if(was_output)cout << " ";

  cout << a;

  was_output = true;

}

void outendl(){

  was_output = false;

  cout << endl;

}

ll in(){

  ll res;

  scanf("%lld", &res);

  return res;

}



template<class t>

istream& operator>>(istream&is, vector<t>&x){

  for(auto &i:x)is >> i;

  return is;

}



template<class t, class u>

istream& operator>>(istream&is, pair<t, u>&x){

  is >> x.first >> x.second;

  return is;

}



template<class t>

void in(t&x){

  cin >> x;

}



template<class t>

void out(t x){

  cout << x;

}



int main(){

  int n = in();

  int m = in();

  vector<pii> keys(m);

  foreach(key,keys){

    key.first = in();

    int b = in();

    rep(i,b){

      key.second |= bit(in()-1);

    }

  }

  vector<int> dp(bit(n),INF);

  dp[0] = 0;

  rep(i,bit(n)){

    foreach(key,keys){

      chmin(dp[i|key.second],dp[i]+key.first);

    }

  }

  int ans = dp[bit(n)-1];

  cout << (ans==INF?-1:ans) << endl;

  return 0;

}


// Fastest known solution for this problem: