#include<stdio.h>
#include<string.h>
#include<iostream>
#include<vector>
using namespace std;
const int N=3e4+500;
const int M=5e2+500;
int vis[N];
int vispos[N];
vector<int>a[M];
vector<int>d[N];
void ganran(int b)
{
if(vispos[b]==1)
return ;
vispos[b]=1;
for(int j=0;j<a[b].size();j++)
{
vis[a[b][j]]=1;
for(int k=0;k<d[a[b][j]].size();k++)
ganran(d[a[b][j]][k]);
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
{
memset(vis,0,sizeof(vis));
memset(vispos,0,sizeof(vispos));
vector<int>a1[M];
vector<int>d1[N];
swap(a,a1);
swap(d,d1);
}
int num,id;
vis[0]=1;
for(int i=0;i<m;i++)
{
cin>>num;
for(int j=0;j<num;j++)
{
cin>>id;
a[i].push_back(id);
d[id].push_back(i);
}
}
for(int i=0;i<d[0].size();i++)
ganran(d[0][i]);
int ans=0;
for(int j=0;j<n;j++)
{
if(vis[j]==1)
ans++;
}
cout<<ans<<endl;
}
return 0;
}
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<vector>
using namespace std;
const int N=3e4+500;
const int M=5e2+500;
int a[N],size[N];
int n,m;
void init()
{
for(int i=0;i<n;i++)
a[i]=i,size[i]=1;
}
int getf(int x)
{
if(a[x]==x)
return x;
return a[x]=getf(a[x]);
}
void mem(int x,int y)
{
int xx=getf(x);
int yy=getf(y);
if(xx!=yy)
{
if(xx==0)
a[yy]=xx,size[xx]+=size[yy];
else
a[xx]=yy,size[yy]+=size[xx];
}
else
return ;
}
int main()
{
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
init();
int num,id;
for(int i=0;i<m;i++)
{
cin>>num;
int boss;
for(int j=0;j<num;j++)
{
cin>>id;
if(j==0)
boss=id;
else
mem(boss,id);
}
}
cout<<size[0]<<endl;
}
return 0;
}