#include <iostream>
#include <string>
using namespace std;
const int MAX = 1001;
int n, k, p, total = 0;//total:不等式出现的次数,其他为计数的
char sign;
int t[MAX] = {0};//每次输入的数据,输入一组数据就处理一组
int r[MAX] = {0};//确定为真的硬币
int w[MAX] = {0};//记录可能为假硬币出现的次数
//出现在大于那边的w[i]++,出现在小于那边的w[i]--,假硬币不可能又轻又重
int main()
{
       int i;
       cin >> n >> k;
    while (k--)
    {//输入
        cin >> p;
        for (i = 0; i < 2 * p; i++)
        {
            cin >> t[i];
        }

        cin >> sign;//输入<,>,=
        if (sign == '=')
        {//标记肯定为真的硬币
            for ( i = 0; i < 2 * p; i++)
            {
                r[t[i]] = 1;
            }
        }
        else if (sign == '<')
        { //左轻右重
            total++;
            for ( i = 0; i < p; i++)
            {//p之前为不等号左边的
                w[t[i]]--;
            }
            for ( i = p; i < 2 * p; i++)
            {//p开始为不等号右边的
                w[t[i]]++;
            }
        }
        else if (sign == '>')
        {//左重右轻
            total++;
            for ( i = 0; i < p; i++)
            {//p之前为不等号左边的
                w[t[i]]++;
            }
            for (i = p; i < 2 * p; i++)
            {//p开始为不等号右边的
                w[t[i]]--;
            }
        }
    }//end while
       //假币在不等式中每次都应该出现
    int count = 0, pos = 0;
    for (i = 1; i <= n; i++)
    {
        if (r[i]==1)
        {//真的硬币忽过
            continue;
        }
        if (w[i] == total || w[i] == 0 - total)
        {//找每次都出现在不等式一边的"假币",比真重的情况或者比真轻的情况
            count++;
            pos = i;
        }
    }
    if (count != 1)
    {//假币唯一则输出
        cout << 0 << endl;
    }
    else
    {
        cout << pos << endl;
    }
    return 0;
}