#include <bits/stdc++.h>
using namespace std;
const int H = 155;
const int N = 1e5 + 9;
int l[N * H], r[N * H], t[N * H], ch[N * H];
long long nxt = 1, h, q;
long long f, s;
void extend(int v) {
  l[v] = nxt++;
  r[v] = nxt++;
}
void prop(int v) {
  t[l[v]] += ch[v];
  t[r[v]] += ch[v];
  ch[l[v]] += ch[v];
  ch[r[v]] += ch[v];
  ch[v] = 0;
  return;
}
void update(long long i, long long j, int v = 0, long long b = f,
            long long e = s) {
  if (i > e || b > j) return;
  if (i <= b && e <= j) {
    t[v]++;
    ch[v]++;
    return;
  }
  if (l[v] == -1) extend(v);
  long long mid = b + e >> 1;
  prop(v);
  update(i, j, l[v], b, mid);
  update(i, j, r[v], mid + 1, e);
  t[v] = max(t[l[v]], t[r[v]]);
  return;
}
void find(int v = 0, long long b = f, long long e = s) {
  if (l[v] == -1) extend(v);
  long long mid = b + e >> 1;
  prop(v);
  if (b == e) {
    cout << b << '\n';
    exit(0);
  }
  if (t[l[v]] == q && t[r[v]] == q) {
    cout << "Data not sufficient!\n";
    exit(0);
  }
  if (t[l[v]] != q && t[r[v]] != q) {
    cout << "Game cheated!\n";
    exit(0);
  }
  if (t[l[v]] == q)
    find(l[v], b, mid);
  else
    find(r[v], mid + 1, e);
  return;
}
int main() {
  memset(l, -1, sizeof l);
  memset(r, -1, sizeof r);
  cin >> h >> q;
  f = 1LL << (h - 1), s = (1LL << h) - 1;
  for (int k = 0; k < q; k++) {
    long long i, L, R, ans;
    cin >> i >> L >> R >> ans;
    L *= 1LL << (h - i);
    R *= (1LL << (h - i));
    R += (1LL << (h - i)) - 1;
    if (ans == 0) {
      update(f, L - 1);
      update(R + 1, s);
    } else
      update(L, R);
  }
  if (t[0] != q) {
    cout << "Game cheated!\n";
    return 0;
  }
  find();
}
