#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 ;
}