#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
bool find1(int x,vector<vector<int>>line,int*used,int*girl,int m){
int i,j;
for (j=0;j<m;j++){
if (line[x][j]==true && used[j]==false)
{
used[j]=1;
if (girl[j]==0 || find1(girl[j],line,used,girl,m)) {
girl[j]=x;
return true;
}
}
}
return false;
}
int main(){
int a,b;
cin>>a>>b;
vector<vector<int>>x(a+1);
for(int i =1;i<x.size();i++)
{x[i].resize(b);}
for(int i =1;i<a+1;i++)
{
int r;
cin>>r;
for(int j=0;j<r;j++)
{
int temp;
cin>>temp;
x[i][temp-1]=1;
}
}
/*for(int i =1;i<a+1;i++)
{
for(int j =0;j<b;j++)
{
cout<<x[i][j];
}
cout<<endl;
}*/
int *used = new int[b];
int *girl = new int[b];
for(int j = 0;j<b;j++)
{girl[j]=0;}
int all = 0;
for (int i=1; i<a+1;i++)
{
for(int j = 0;j<b;j++)
{used[j]=0;}
if(find1(i,x,used,girl,b))
all+=1;
}
cout<<all;
}