#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
vector<int> work[1001];
int n, m;
bool visit[1001];
int person[1001][2];
void input()
{
int i, cnt, num;
scanf("%d %d", &n, &m);
for (i = 1; i <= n; i++) {
scanf("%d", &cnt);
while (cnt--) {
scanf("%d", &num);
work[num].push_back(i);
}
}
}
int dfs(int w)
{
int i, j, p;
if (visit[w]) return 0;
visit[w] = true;
for (i = 0; i < work[w].size(); i++) {
p = work[w][i];
for (j = 0; j < 2; j++) {
if (!person[p][j] || dfs(person[p][j])) {
person[p][j] = w;
return 1;
}
}
}
return 0;
}
int bmatching()
{
int ans = 0;
int w;
for (w = 1; w <= m; w++) {
memset(visit, 0, sizeof(visit));
ans += dfs(w);
}
return ans;
}
int main()
{
input();
printf("%d\n", bmatching());
return 0;
}