from collections import defaultdict


def parse_input():
    N, M = map(int, input().split())
    assert 1 <= N <= 1000
    assert 1 <= M <= 100

    flags = []
    for _ in range(N):
        ki = int(input())
        colori = set([int(cj) for cj in input().split()])
        assert ki == len(colori)
        flags.append(colori)

    return N, M, flags


def select_all_color_two_flags(flags):
    count_color = defaultdict(int)
    for flag in flags:
        for color in flag:
            count_color[color] += 1

    colors_in_two_flags = set()
    for color, count in count_color.items():
        if count >= 2:
            colors_in_two_flags.add(color)

    return colors_in_two_flags


def find_countries_not_covered(flags, colors):
    pins = set()
    necessary_colors = set()
    for country, flag in enumerate(flags):
        if not flag.issubset(colors):
            pins.add(country)
        else:
            necessary_colors = necessary_colors.union(flag)
    return pins, necessary_colors


N, M, flags = parse_input()
colors_in_two_flags = select_all_color_two_flags(flags)
pins, necessary_colors = find_countries_not_covered(flags, colors_in_two_flags)
print(len(pins)+len(necessary_colors))
