#include <bits/stdc++.h>
const char en = '\n';
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  long long h, q;
  cin >> h >> q;
  vector<pair<pair<long long, long long>, long long>> V;
  while (q--) {
    long long i, l, r, ans;
    cin >> i >> l >> r >> ans;
    for (long long j = i; j < h; j++) {
      l *= 2;
      r *= 2;
      r += 1;
    }
    V.push_back(make_pair(make_pair(l, r), ans));
  }
  long long l = 1LL << (h - 1), r = (1LL << (h)) - 1;
  for (long long j = 0; j < V.size(); j++) {
    if (V[j].second == 1) {
      l = max(l, V[j].first.first);
    }
  }
  for (long long j = 0; j < V.size(); j++) {
    if (V[j].second == 1) {
      r = min(r, V[j].first.second);
    }
  }
  if (l > r) {
    cout << "Game cheated!" << en;
    return 0;
  }
  map<long long, long long> M;
  M[l] = r;
  sort(V.begin(), V.end());
  for (int i = 0; i < V.size(); i++) {
    if (V[i].second == 0) {
      long long le = V[i].first.first;
      long long ri = V[i].first.second;
      while (M.lower_bound(le) != M.end() && M.lower_bound(le)->first <= ri) {
        auto it = M.lower_bound(le);
        auto x = *it;
        M.erase(it);
        if (x.second > ri) {
          M[ri + 1] = x.second;
        }
      }
      auto it = M.lower_bound(le);
      if (it != M.begin()) {
        it--;
        if (it->second >= le) {
          auto x = *it;
          it->second = le - 1;
          if (x.second > ri) M[ri + 1] = x.second;
        }
      }
    }
  }
  if (M.size() == 1 && M.begin()->first == M.begin()->second) {
    cout << M.begin()->first << en;
    return 0;
  }
  if (M.size() > 0) {
    cout << "Data not sufficient!" << en;
    return 0;
  }
  cout << "Game cheated!" << en;
}
