#include <bits/stdc++.h>
using namespace std;
long long sum[55];
long long two[55];
const int maxn = 200000 + 10;
struct node {
  long long l;
  long long r;
} jiedian[maxn];
int cmp(node a, node b) { return a.l < b.l || (a.l == b.l && a.r < b.r); }
int main() {
  two[0] = 1;
  sum[1] = 1;
  for (int i = 1; i <= 50; i++) two[i] = two[i - 1] * 2;
  for (int i = 2; i <= 50; i++) sum[i] = sum[i - 1] + two[i - 1];
  int h, q;
  scanf("%d%d", &h, &q);
  int cnt = 0;
  for (int i = 1; i <= q; i++) {
    long long a, l, r, ans;
    scanf("%lld%lld%lld%lld", &a, &l, &r, &ans);
    l = l * two[h - a];
    int temp1 = a;
    while (temp1 < h) {
      r = r * 2 + 1;
      temp1++;
    }
    if (ans) {
      if (l > sum[h - 1] + 1) {
        jiedian[cnt].l = sum[h - 1] + 1;
        jiedian[cnt++].r = l - 1;
      }
      if (r < sum[h]) {
        jiedian[cnt].l = r + 1;
        jiedian[cnt++].r = sum[h];
      }
    } else {
      jiedian[cnt].l = l;
      jiedian[cnt++].r = r;
    }
  }
  sort(jiedian, jiedian + cnt, cmp);
  long long t = 0;
  long long head = sum[h - 1] + 1;
  long long temp = sum[h - 1];
  long long ans;
  if (cnt > 0) {
    t += jiedian[0].l - head;
    if (t == 1) ans = sum[h - 1] + 1;
    temp = jiedian[0].r;
  }
  for (int i = 1; i < cnt; i++) {
    if (jiedian[i].l > temp + 1) {
      t += jiedian[i].l - temp - 1;
      if (t == 1) ans = jiedian[i].l - 1;
      temp = jiedian[i].r;
    } else {
      if (jiedian[i].r <= temp)
        continue;
      else {
        temp = jiedian[i].r;
      }
    }
  }
  if (sum[h] != temp) {
    t = t + sum[h] - temp;
    if (t == 1) ans = sum[h];
  }
  if (t == 0) printf("Game cheated!\n");
  if (t == 1) printf("%lld\n", ans);
  if (t > 1) printf("Data not sufficient!\n");
  return 0;
}
