#include <bits/stdc++.h>
using namespace std;
vector<vector<pair<long long, long long> > > A(2);
int h, q;
void Exit(string s) {
  printf("%s\n", s.c_str());
  exit(0);
}
void Exit(long long x) {
  printf("%I64d\n", x);
  exit(0);
}
void add_query(int i, long long l, long long r, int ans) {
  A[!ans].push_back(pair<long long, long long>(
      (l << (h - i)), (r << (h - i)) + (1LL << (h - i)) - 1));
}
void check_sufficient() {
  if (A[0].empty()) {
    vector<pair<long long, long long> > P;
    for (int i = 0; i < (int)A[1].size(); ++i) {
      P.push_back(pair<long long, long long>(A[1][i].first, -1));
      P.push_back(pair<long long, long long>(A[1][i].second + 1, 1));
    }
    sort(P.begin(), P.end());
    long long I = (1LL << (h - 1)), J = (1LL << h) - 1;
    if (!P.size()) {
      if (J == I)
        Exit(I);
      else
        Exit("Data not sufficient!");
    }
    long long cur = -1, cnt = P[0].first - (1LL << (h - 1)),
              first = (1LL << (h - 1));
    for (int i = 1; i < (int)P.size(); ++i) {
      if (!cur) {
        cnt += P[i].first - P[i - 1].first;
        first = P[i - 1].first;
      }
      cur += P[i].second;
    }
    if (P.back().first <= J) cnt += J - P.back().first + 1, first = J;
    if (cnt == 1)
      Exit(first);
    else if (cnt > 1)
      Exit("Data not sufficient!");
    else
      Exit("Game cheated!");
    return;
  }
  vector<long long> G, H;
  for (int i = 0; i < (int)A[0].size(); ++i) {
    G.push_back(A[0][i].first);
    H.push_back(A[0][i].second);
  }
  sort(G.begin(), G.end());
  sort(H.begin(), H.end());
  if (G.back() > H.front()) Exit("Game cheated!");
  long long I = G.back(), J = H.front();
  vector<pair<long long, long long> > P;
  for (int i = 0; i < (int)A[1].size(); ++i) {
    if (!((I <= A[1][i].first && A[1][i].first <= J) ||
          (I <= A[1][i].second && A[1][i].second <= J)))
      continue;
    P.push_back(pair<long long, long long>(max(I, A[1][i].first), -1));
    P.push_back(pair<long long, long long>(min(A[1][i].second, J) + 1, 1));
  }
  if (!P.size()) {
    if (J == I)
      Exit(I);
    else
      Exit("Data not sufficient!");
  }
  sort(P.begin(), P.end());
  long long cur = -1, cnt = P[0].first - I, first = I;
  for (int i = 1; i < (int)P.size(); ++i) {
    if (!cur) {
      cnt += P[i].first - P[i - 1].first;
      first = P[i - 1].first;
    }
    cur += P[i].second;
  }
  if (P.back().first <= J) cnt += J - P.back().first + 1, first = J;
  if (cnt == 1)
    Exit(first);
  else if (cnt > 1)
    Exit("Data not sufficient!");
  else
    Exit("Game cheated!");
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> h >> q;
  int i;
  long long l, r;
  int ans;
  while (q--) {
    cin >> i >> l >> r >> ans;
    add_query(i, l, r, ans);
  }
  check_sufficient();
}
