// 简单并查集,一共m组人,每一组的第一个人和剩余的人合并,最后,遍历n个人,查找与root[0]相等的人。
#include<iostream>
#include<cstdio>
using namespace std;
int root[30001];
int find_(int x)
{
int r=x,temp;
while(root[x]!=x)
x=root[x];
while(r!=x){ // 路劲压缩
temp=root[r];
root[r]=x;
r=temp;
}
return x;
}
int main()
{
int m,n,i;int m1,m2;int m3;
while(scanf("%d%d",&n,&m),m||n)
{
if(n==1) {printf("1\n");continue;}
for(i=0;i<n;i++)
root[i]=i;
while(m--){
scanf("%d%d",&m1,&m2);
m1--;
while(m1--){
scanf("%d",&m3);
if(find_(m2)!=find_(m3))
root[find_(m2)]=root[find_(m3)]; // 合并
}
}
int ans=0;
for(i=0;i<n;i++)
if(find_(root[i])==find_(0)) // 与0相关的人
ans++;
printf("%d\n",ans);
}
return 0;
}