#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 30010; //最多三万个学生嘛
int p[N]; //p[i] = j表示学生i在j组,p[i] = 0表示这个学生没在任何组里
int st[N]; //表示这个数之前有没有出现过,st[i] = 1出现过,else 没出现过
int cnt[N]; //cnt[i] 表示第 i 组数据里面的元素个数
//如果最后p[0] = 0,输出1, 否则输出cnt[p[0]]
int a[N]; //暂时每组的数字
int n, m; //n 个学生,m 组数据
int main()
{
//一次次扫,把该在一块的元素的p[i]的值搞成一样的
while(cin >> n >> m && (n != 0 || m != 0))
{
memset(p, 0, sizeof p); //一开始都没在任何一个组里
memset(st, 0, sizeof st); //一开始每一个数字都没有出现过
memset(cnt, 0, sizeof cnt);
for(int i = 1;i <= m;i ++ ) //每一组数据后面有 m 行
{
int k;
scanf("%d",&k); //每行的第一个数是这组中个数
int flag = 0; //立个flag,这组数中的数在其他组中没有
for(int j = 1;j <= k;j ++ )
{
scanf("%d",&a[j]);
if(st[a[j]] == 0){ //如果这个数之前没有出现过
st[a[j]] = 1;
p[a[j]] = i;
cnt[i] ++;
} else {
flag = p[a[j]];
}
}
if(flag){
for(int j = 1;j <= k;j ++ )
{
if(p[a[j]] != flag) cnt[flag] ++;
p[a[j]] = flag;
}
}
}
if(p[0] == 0) printf("%d\n",1);
else printf("%d\n",cnt[p[0]]);
}
return 0;
}