using System;
namespace DiscraKursach
{
class Program
{
static void Main(string[] args)
{
int n, m;//n - кол-во монет, m - кол-во взвешиваний
string[] nums_strings = Console.ReadLine().Split();
n = int.Parse(nums_strings[0]);
m = int.Parse(nums_strings[1]);
int suspect =0;
int unclear =0;
int[] nomera;
int[] moneti = new int[n+1];
int pi;
string znac;
for (int i = 0; i < m; i++)
{
nums_strings = Console.ReadLine().Split();
pi = Convert.ToInt32(nums_strings[0]);
nomera = new int[pi*2];
for (int j = 0; j < pi*2; j++)
{
nomera[j] = Convert.ToInt32(nums_strings[j+1]);
}
znac = Console.ReadLine();
if (znac == "=")
{
for (int j = 0; j < pi * 2; j++)
{
moneti[nomera[j]] = 2;
}
}
else
{
for (int j = 0; j < pi * 2; j++)
{
if(moneti[nomera[j]]!=2)
moneti[nomera[j]] = 1; // 1 - статус возможно фальшивой монеты
}
}
}
int nsusp=-111111;
int nuncl = -111111;
//for (int i = 1; i < n + 1; i++)
//{
// Console.Write(moneti[i] + " ");
//}
for (int i = 1; i < n+1; i++)
{
if (moneti[i] == 1)
{
suspect++;
nsusp = i;
}
else if (moneti[i] == 0)
{
unclear++;
nuncl = i;
}
}
//Console.WriteLine();
//Console.WriteLine();
//Console.WriteLine(suspect);
//Console.WriteLine(unclear);
//Console.WriteLine(nsusp);
//Console.WriteLine(nuncl);
//Console.WriteLine();
if (suspect == 1)
Console.WriteLine(nsusp);
else if ((suspect == 0) && (unclear == 1))
Console.WriteLine(nuncl);
else
Console.WriteLine(0);
}
}
}