#include <bits/stdc++.h>
long long rd() {
  char c = getchar();
  long long s = 0, f = 1;
  while (c > '9' || c < '0') {
    if (c == '-') f = -f;
    c = getchar();
  }
  while (c >= '0' && c <= '9') s = s * 10 + c - '0', c = getchar();
  return s * f;
}
using namespace std;
const int N = 60, M = 400010;
int h, q, cnt;
long long sum[N], v[N];
struct hh {
  long long l, r;
} a[M];
bool cmp(hh a, hh b) { return a.l < b.l; }
long long max(long long l, long long r) { return l < r ? r : l; }
int main() {
  v[1] = sum[1] = 1;
  h = rd(), q = rd();
  cnt = 0;
  for (int i = 2; i <= h; i++) v[i] = v[i - 1] << 1, sum[i] = sum[i - 1] + v[i];
  while (q--) {
    long long x = rd(), l = rd(), r = rd(), f = rd();
    l -= sum[x - 1];
    r -= sum[x - 1];
    l = (l - 1 << h - x) + 1, r = r << h - x;
    if (f == 0)
      a[++cnt] = (hh){l, r};
    else {
      if (l > 1) a[++cnt] = (hh){1, l - 1};
      if (r < v[h]) a[++cnt] = (hh){r + 1, v[h]};
    }
  }
  sort(a + 1, a + cnt + 1, cmp);
  long long ans = -1, R = 1, t = 0;
  for (int i = 1; i <= cnt; i++) {
    if (a[i].l > R) ans = R, t += a[i].l - R;
    R = max(R, a[i].r + 1);
  }
  if (v[h] >= R) ans = R, t += v[h] - R + 1;
  if (t == 0)
    puts("Game cheated!");
  else if (t > 1)
    puts("Data not sufficient!");
  else
    printf("%lld\n", ans + sum[h - 1]);
}
