def is_enough(i):
    celk = 0
    was = [0 for _ in range(K+1)]
    beg, end = 0, 0
    zmr = 0
    while beg != N:
        if zmr <= i:
            if celk == K:
                return True
            for j in pole[end]:
                if not was[j]:
                    celk += 1
                was[j]+=1
            zmr+=len(pole[end])
            end+=1
            end%=N
        else:
            for j in pole[beg]:
                if was[j] == 1:
                    celk -= 1
                was[j]-=1
            zmr-=len(pole[beg])
            beg+=1
    return False

def get_upper(x):
    l = 1
    while l < x:
        l*=2
    return l

try:
    while 1:
        N, K = list(map(int, input().split()))
        pole = [list(map(int, input().split()))[1:] for _ in range(N)]
        velik = [len(b) for b in pole]
        velik_sum = sum(velik)
        down, up = K-1, velik_sum+2
        while down+1 < up:
            i = (down+up)//2
            if is_enough(i):
                up = i
            else:
                down = i
        
        print(up if up < velik_sum+1 else -1)

except EOFError:
    pass
