#include <stdio.h>
#include <string.h>
#define max 0xFFFFFFFF
unsigned long N[10000] , M [10000] , A[10000] , B[10000];
int n,m,i,j,x,y,r,k,rn,rm;
void Extract ( unsigned long *A , unsigned long *B )
{
int i;
for ( i=1 ; i<=n ; i++ )
A[i] = A[i]&&!B[i] ;
}
void Deny ( unsigned long *A , unsigned long *B )
{
int i;
for ( i=1 ; i<=n ; i++ )
A[i]=B[i]&&A[i];
}
void count ( unsigned long *A , int &x , int &k )
{
int i;
for ( i=1 ; i<=n ; i++ )
if (A[i]) x++ , k = i;
}
int main ()
{
freopen ( "balanta.in" , "r" , stdin );
scanf ( "%d %d" , &n , &m );
memset ( N , 1 , sizeof ( int )*n+2 );
memset ( M , 1 , sizeof ( int )*n+2 );
for ( i=0 ; i<m ; i++ ) {
scanf ( "%d" , &x );
memset ( A , 0 , sizeof ( int ) * n + 2 );
memset ( B , 0 , sizeof ( int ) * n + 2 );
for ( j=0 ; j<x ; j++ ) {
scanf ( "%d" , &r );
A[r]=1;
}
for ( j=0 ; j<x ; j++ ) {
scanf ( "%d" , &r );
B[r]=1;
}
scanf ( "%d" , &k );
if ( k == 0 ) {
Extract ( N , A );
Extract ( N , B );
Extract ( M , A );
Extract ( M , B );
}
if ( k == 1 ) {
Deny ( N , A );
Deny ( M , B );
}
if ( k==2 ) {
Deny ( M , A );
Deny ( N , B );
}
}
x=0;y=0;rn=0;rm=0;
count ( N , x , rn );
count ( M , y , rm );
freopen ( "balanta.out" , "w" , stdout );
if ( !( ((x==1)&&(y==0))||((x==0)&&(y==1)) ) ) printf ( "0\n" ) ; else
if ( x==1 ) printf ( "%d\n" , rn ) ; else printf ( "%d\n" , rm );
fclose ( stdout );
return 0;
}