#include #define REP(A,B) for(int (A)=0;(A)<(B);(A)++) #define pb push_back using namespace std; char canvas[111][111]; int main() { int n,k; while(scanf("%d %d", &n, &k) == 2) { vector< vector > S; REP(i, n) { int L; scanf("%d", &L); vector curr; REP(j, L) { int x; scanf("%d", &x); curr.pb(x); } S.pb(curr); } map pokryto; int aktualne = 0; long long ans = 1LL<<60; long long cans = 0; int zacatek = 0; for(int pridavam = 0; pridavam < 2*n; pridavam++) { int idx = pridavam%n; for(int j : S[idx]) { pokryto[j]++; cans++; if(pokryto[j] == 1) aktualne++; } // printf("aktualne pokryto: %d\n", aktualne); while(aktualne == k) { ans = min(ans, cans); for(int j : S[zacatek]) { pokryto[j]--; cans--; if(pokryto[j] == 0) aktualne--; } zacatek = (zacatek+1)%n; } } if(ans == 1LL<<60) printf("-1\n"); else printf("%lld\n", ans); } return 0; }