#include<stdio.h>
int p[30006],q[30006];
int find(int x)
{
if(p[x] == x) return x;
return p[x] = find(p[x]);
}
void Union(int x, int y)
{
int fx = find(x);
int fy = find(y);
if(fx != fy) {p[fx] = fy; q[fy] += q[fx];}
}
int main()
{
int n,m,a,b;
int k;
while(scanf("%d%d",&n,&m))
{
if(n ==0 && m == 0) break;
for(int i = 0; i < n; i++) {p[i] = i; q[i] = 1;}
for(int i = 1; i <= m; i++)
{
scanf("%d",&k);
if(k >= 1)
{
scanf("%d",&a);
}
while(--k)
{
scanf("%d",&b);
Union(a,b);
}
}
int x = p[0];
while(x != p[x])
x = p[x];
printf("%d\n",q[x]);
}
return 0;
}
/*
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 5
5 1 2 3 4 5
1 0
0 0
4
1
1
*/
int p[30006],q[30006];
int find(int x)
{
if(p[x] == x) return x;
return p[x] = find(p[x]);
}
void Union(int x, int y)
{
int fx = find(x);
int fy = find(y);
if(fx != fy) {p[fx] = fy; q[fy] += q[fx];}
}
int main()
{
int n,m,a,b;
int k;
while(scanf("%d%d",&n,&m))
{
if(n ==0 && m == 0) break;
for(int i = 0; i < n; i++) {p[i] = i; q[i] = 1;}
for(int i = 1; i <= m; i++)
{
scanf("%d",&k);
if(k >= 1)
{
scanf("%d",&a);
}
while(--k)
{
scanf("%d",&b);
Union(a,b);
}
}
int x = p[0];
while(x != p[x])
x = p[x];
printf("%d\n",q[x]);
}
return 0;
}
/*
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 5
5 1 2 3 4 5
1 0
0 0
4
1
1
*/