#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
int h[2000], l[2000], a[2000], b[2000], n, m, rez, x;
int scadere(int x[], int n, int y[], int m)
{
int i, j, aux[2000], nr=0;
for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
{
if (y[i]==x[j]) x[j]=0;
}
for (i=1; i<=n; i++)
if (x[i]!=0) aux[++nr]=x[i];
memcpy(x,aux,sizeof(aux));
return nr;
}
int intersectie(int x[], int n, int y[], int m)
{
int i, j, aux[2000], nr=0;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (x[i]==y[j]) aux[++nr]=x[i];
memcpy(x,aux,sizeof(aux));
return nr;
}
int main()
{
freopen("balanta.in","r",stdin);
freopen("balanta.out","w",stdout);
int i, j, l1, l2;
scanf ("%d %d",&n, &m);
l1=l2=n;
for (i=1; i<=n; i++)
h[i]=l[i]=i;
for (i=1; i<=m; i++)
{
scanf ("%d",&x);
for (j=1; j<=x; j++)
scanf ("%d",&a[j]);
for (j=1; j<=x; j++)
scanf ("%d",&b[j]);
scanf("%d",&rez);
switch (rez)
{
case 0 : { l1=scadere(h,l1,a,x); l1=scadere(h,l1,b,x);
l2=scadere(l,l2,a,x); l2=scadere(l,l2,b,x);
break;}
case 1 : { l1=intersectie(h,l1,a,x); l2=intersectie(l,l2,b,x);
break; }
case 2 : { l1=intersectie(h,l1,b,x); l2=intersectie(l,l2,a,x);
break; }
}
}
if (l1==1 && l2==0) printf("%d",h[1]);
else if (l2==1 && l1==0) printf("%d",l[1]);
else printf("0");
return 0;
}