#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <limits>
#include <utility>
#include <iomanip>
#include <set>
#include <numeric>
#include <cassert>
#include <ctime>

#define INF_MAX 2147483647
#define INF_MIN -2147483647
#define INF_LL 9223372036854775807LL
#define INF 2000000000
#define PI acos(-1.0)
#define EPS 1e-8
#define LL long long
#define mod 1000000007
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define setzero(a) memset(a,0,sizeof(a))
#define setdp(a) memset(a,-1,sizeof(a))
#define bits(a) __builtin_popcount(a)

using namespace std;

set<pair<LL, LL> > s;
bool test;

void solve(LL &xx, LL &yy, bool yes)
{
  set<pair<LL, LL> >::iterator it = s.lower_bound(mp(xx, xx));
  set<pair<LL, LL> >::iterator it2 = s.lower_bound(mp(yy, yy));
  if(it == s.end())
    it--;
  if(it2 == s.end())
    it2--;
  pair<LL, LL> L = *it, R = *it2;
  if(yes)
  {
    if(R.s < xx)
    {
      test = false;
      return;
    }
    if(L.f > yy && it == s.begin())
    {
      test = false;
      return;
    }
    if(L.f > xx && it == s.begin())
    {
      if(R.f > yy)
      {
        it2--;
        R = *it2;
      }
      L = mp(R.f, min(yy, R.s));
      it = it2;
      while(it2 != s.end())
      {
        it++;
        s.erase(it2);
        it2 = it;
      }
      s.insert(L);
    }
    else
    {
      if(R.f > yy)
      {
        it2--;
        R = *it2;
      }
      if(L.f > xx)
      {
        it--;
        L = *it;
      }
      if(L.s < xx)
      {
        if(it == it2)
        {
          test = false;
          return;
        }
        it++;
        L = *it;
      }
      if(it == it2)
      {
        L = mp(max(xx, L.f), min(yy, R.s));
        s.clear();
        s.insert(L);
        return;
      }
      L = mp(max(xx, L.f), L.s);
      R = mp(R.f, min(yy, R.s));
      set<pair<LL, LL> >::iterator it3 = it, it4;
      it4 = it3;
      while(1)
      {
        if(it3 == it)
        {
          s.erase(it);
          break;
        }
        it4++;
        s.erase(it3);
        it3 = it4;
      }
      it3 = it2;
      it4 = it3;
      while(it3 != s.end())
      {
        it4++;
        s.erase(it3);
        it3 = it4;
      }
      s.insert(L);
      s.insert(R);
    }
  }
  else
  {
    if(R.s < xx)
      return;
    if(L.f > yy && it == s.begin())
      return;
    if(L.f > xx && it == s.begin())
    {
      if(R.f > yy)
      {
        it2--;
        R = *it2;
      }
      L = mp(yy + 1, R.s);
      it = it2;
      while(1)
      {
        if(it2 == s.begin())
        {
          s.erase(it2);
          break;
        }
        it--;
        s.erase(it2);
        it2 = it;
      }
      if(L.f <= L.s)
        s.insert(L);
    }
    else
    {
      if(R.f > yy)
      {
        it2--;
        R = *it2;
      }
      if(L.f > xx)
      {
        it--;
        L = *it;
      }
      if(L.s < xx)
      {
        if(it == it2) return;
        it++;
        L = *it;
      }
      bool can = true;
      if(it == it2)
      {
        s.erase(it);
        can = false;
      }
      L = mp(L.f, xx - 1);
      R = mp(yy + 1, R.s);
      set<pair<LL, LL> >::iterator it3 = it;
      while(can)
      {
        if(it == it2)
        {
          s.erase(it);
          break;
        }
        it3++;
        s.erase(it);
        it = it3;
      }
      if(L.f <= L.s)
        s.insert(L);
      if(R.f <= R.s)
        s.insert(R);
    }
    test &= (s.size() != 0);
  }
}

int main()
{
  //ios_base::sync_with_stdio(0);
  //freopen("lca.in", "r", stdin);
  //freopen("lca.out", "w", stdout);
  int n, q, lev;
  LL x, y;
  int yes;
  scanf("%d %d", &n, &q);
  s.insert(mp(1LL << (n - 1), (1LL << n) - 1));
  test = true;
  while(q-- && test)
  {
    scanf("%d %I64d %I64d %d", &lev, &x, &y, &yes);
    for(int i=lev;i<n && test;i++)
    {
      x = x * 2;
      y = y * 2 + 1;
    }
    solve(x, y, yes);
  }
  if(!test)
    cout << "Game cheated!";
  else
  {
    pair<LL, LL> res;
    if(s.size() == 1)
    {
      res = *s.lower_bound(mp(0, 0));
      if(res.f != res.s) test = false;
    }
    else test = false;
    if(!test)
      cout << "Data not sufficient!";
    else cout << res.f;
  }
  return 0;
}