#include<stdio.h>
#include<fstream.h>
#define nmax 1029
int a[nmax],sol,b[nmax],n,m,k[nmax],ts[nmax][nmax],td[nmax][nmax],r[nmax];
void citeste()
{int i,j;
freopen("balanta.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{scanf("%d",&k[i]);
for(j=1;j<=k[i];j++)
scanf("%d",&ts[i][j]);
for(j=1;j<=k[i];j++)
scanf("%d",&td[i][j]);
scanf("%d",&r[i]);
}
}
void afiseaza()
{
freopen("balanta.out","w",stdout);
printf("%d",sol);
fclose(stdout);
}
int scadere()
{int i,so;
for(i=1;i<=n;i++)
if(a[i]&&b[i])
a[i]=0;
for(i=1;i<=n;i++)
if(a[i])
if(!so)
so=i;
else
return 0;
return so;
}
void init1()
{int i,j;
for(i=1;i<=m;i++)
if(r[i]==1)
{
for(j=1;j<=k[i];j++)
a[ts[i][j]]=1;
return;
}
else
if(r[i]==2)
{for(j=1;j<=k[i];j++)
a[td[i][j]]=1;
return;
}
}
void init2()
{int i,j;
for(i=1;i<=m;i++)
if(r[i]==1)
{for(j=1;j<=k[i];j++)
a[td[i][j]]=1;
return;
}
else if(r[i]==2)
{for(j=1;j<=k[i];j++)
a[ts[i][j]]=1;
return;
}
}
int rezolva()
{int i,j,a1[nmax],sol1=0,sol2=0;
//moneda e mai grea
init1();
for(i=1;i<=m;i++)
{memset(a1,0,sizeof(a1));
if(r[i]==0)
{for(j=1;j<=k[i];j++)
b[ts[i][j]]=b[td[i][j]]=1;
}
else
if(r[i]==1)
{for(j=1;j<=k[i];j++)
if(a[ts[i][j]])
a1[ts[i][j]]=1;
for(j=1;j<=k[i];j++)
b[td[i][j]]=1;
memcpy(a,a1,sizeof(a1));
}
else
{for(j=1;j<=k[i];j++)
if(a[td[i][j]])
a1[td[i][j]]=1;
for(j=1;j<=k[i];j++)
b[ts[i][j]]=1;
memcpy(a,a1,sizeof(a1));
}
}
sol1=scadere();
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
init2();
//if(sol)
// return sol;
for(i=1;i<=m;i++)
{memset(a1,0,sizeof(a1));
if(r[i]==0)
{for(j=1;j<=k[i];j++)
b[ts[i][j]]=b[td[i][j]]=1;
}
else
if(r[i]==1)
{for(j=1;j<=k[i];j++)
if(a[td[i][j]])
a1[td[i][j]]=1;
for(j=1;j<=k[i];j++)
b[ts[i][j]]=1;
memcpy(a,a1,sizeof(a1));
}
else
{for(j=1;j<=k[i];j++)
if(a[ts[i][j]])
a1[ts[i][j]]=1;
for(j=1;j<=k[i];j++)
b[td[i][j]]=1;
memcpy(a,a1,sizeof(a1));
}
}
sol2=scadere();
if(sol1&&(!sol2))
return sol1;
if(sol2&&(!sol1))
return sol2;
return 0;
}
int main()
{citeste();
sol=rezolva();
afiseaza();
return 0;
}