#include <fstream>
using namespace std;
ifstream f("balanta.in");
ofstream g("balanta.out");
int sol;
int usor[1100], greu[1100], M1[1100], M2[1100];
void discard(int x[], int N);
void keep(int x[], int where[], int cnt, int N);
int num(int x[], int N);
int main()
{
int N, M;
freopen("balanta.in", "r", stdin);
freopen("balanta.out", "w", stdout);
f >> N >> M;
for (int i = 1; i <= N; i ++)
usor[i] = greu[i] = 1;
for (int i = 1; i <= M; i ++)
{
int x, y;
f >> x;
for (int j = 1; j <= x; j ++)
f >> M1[j];
for (int j = 1; j <= x; j ++)
f >> M2[j];
f >> y;
if (y == 0)
discard(M1, x), discard(M2, x);
if (y == 1)
keep(M1, greu, x, N), keep(M2, usor, x, N);
if (y == 2)
keep(M1, usor, x, N), keep(M2, greu, x, N);
}
if (num(greu, N) + num(usor, N) == 1)
g << sol;
else
g << 0;
return 0;
}
void discard(int x[], int N)
{
for (int i = 1; i <= N; i ++)
usor[x[i]] = greu[x[i]] = 0;
}
void keep(int x[], int where[], int cnt, int N)
{
for (int i = 1; i <= cnt; i ++)
if (where[x[i]] == 1)
where[x[i]] = -1;
for (int i = 1; i <= N; i ++)
if (where[i] == -1)
where[i] = 1;
else
where[i] = 0;
}
int num(int x[], int N)
{
int tot = 0;
for (int i = 1; i <= N; i ++)
if (x[i])
tot ++, sol = i;
return tot;
}