#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int h, q;
set<pair<long long, long long> > s;
map<pair<long long, long long>, int> mp;
long long fast_pow(long long x, long long y) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) res *= x;
    x *= x;
    y >>= 1;
  }
  return res;
}
int main() {
  while (~scanf("%d %d", &h, &q)) {
    s.clear();
    mp.clear();
    bool flag = true;
    int lev, ans, d;
    long long L, R, pw;
    pw = fast_pow(2, h - 1);
    pair<long long, long long> p =
        pair<long long, long long>(pw, (pw << 1) - 1);
    for (int i = 0; i < q; ++i) {
      scanf("%d %I64d %I64d %d", &lev, &L, &R, &ans);
      if (mp[pair<long long, long long>(L, R)] == ans + 1) continue;
      mp[pair<long long, long long>(L, R)] = ans + 1;
      if (!flag) continue;
      d = h - lev;
      pw = fast_pow(2, d);
      L *= pw;
      for (int i = 0; i < d; ++i) R = (R << 1) | 1;
      if (ans) {
        if (L > p.second || R < p.first) {
          flag = false;
          continue;
        }
        if ((L <= p.first && p.second <= R) || p.first == p.second) continue;
        set<pair<long long, long long> >::iterator ite;
        for (ite = s.begin(); ite != s.end(); ++ite) {
          if (ite->first <= p.first && p.second <= ite->second) {
            flag = false;
            break;
          } else if (p.second <= ite->second && p.second >= ite->first) {
            p.second = ite->first - 1;
          } else if (ite->first <= p.first && p.first <= ite->second) {
            p.first = ite->second + 1;
          }
        }
        p = pair<long long, long long>(max(L, p.first), min(R, p.second));
      } else {
        set<pair<long long, long long> >::iterator ite, itk;
        ite = s.upper_bound(pair<long long, long long>(L, R));
        itk = ite;
        if (ite != s.begin()) {
          ite--;
          if (ite->second >= L) {
            L = ite->first;
            s.erase(ite);
          }
        }
        ite = itk;
        bool fx = false;
        for (; ite != s.end();) {
          if (ite->second <= R) {
            itk = ite++;
            s.erase(itk);
          } else if (ite->first > R) {
            s.insert(pair<long long, long long>(L, R));
            fx = true;
            break;
          } else if (ite->second > R && ite->first <= R) {
            R = ite->second;
            s.insert(pair<long long, long long>(L, ite->second));
            s.erase(ite);
            fx = true;
            break;
          }
        }
        if (!fx) s.insert(pair<long long, long long>(L, R));
        if (L <= p.first && p.second <= R) {
          flag = false;
        } else if (p.second <= R && p.second >= L) {
          p.second = L - 1;
        } else if (L <= p.first && p.first <= R) {
          p.first = R + 1;
        }
      }
    }
    set<pair<long long, long long> >::iterator ite;
    for (ite = s.begin(); ite != s.end(); ++ite) {
      if (ite->first <= p.first && p.second <= ite->second) {
        flag = false;
        break;
      } else if (p.second <= ite->second && p.second >= ite->first) {
        p.second = ite->first - 1;
      } else if (ite->first <= p.first && p.first <= ite->second) {
        p.first = ite->second + 1;
      }
    }
    if (!flag)
      puts("Game cheated!");
    else if (p.first != p.second)
      puts("Data not sufficient!");
    else
      printf("%I64d\n", p.first);
  }
}
