#include <bits/stdc++.h>
typedef struct map_s {
  long long int le;
  long long int ri;
} map_t;
map_t mp[100005];
int ascomp(const void *a, const void *b) {
  long long int x = ((map_t *)a)->le;
  long long int y = ((map_t *)b)->le;
  long long int s = x - y;
  if (s < 0) {
    return -1;
  } else if (s > 0) {
    return 1;
  }
  return 0;
}
int main() {
  int i;
  int th, nq, nb = 0;
  long long int ml, mr;
  long long int res = -1;
  scanf("%d%d", &th, &nq);
  ml = ((1ll) << (th - 1));
  mr = ((1ll + 1) << (th - 1));
  for (i = 0; i < nq; i++) {
    int h, a;
    long long int l, r;
    scanf("%d%I64d%I64d%d", &h, &l, &r, &a);
    l = ((l) << (th - h));
    r = ((r + 1) << (th - h));
    if (a) {
      if (l > ml) {
        ml = l;
      }
      if (r < mr) {
        mr = r;
      }
    } else {
      mp[nb].le = l;
      mp[nb++].ri = r;
    }
  }
  mp[nb].ri = mr;
  mp[nb++].le = mr;
  qsort(mp, nb, sizeof(*mp), ascomp);
  for (i = 0; i < nb; i++) {
    long long int tl = mp[i].le;
    long long int tr = mp[i].ri;
    if (ml >= mr) {
      break;
    }
    if (tl > ml + 1) {
      puts("Data not sufficient!");
      return 0;
    } else if (tl == ml + 1) {
      if (res != -1) {
        puts("Data not sufficient!");
        return 0;
      }
      res = ml;
    }
    if (tr > ml) {
      ml = tr;
    }
  }
  if (res == -1) {
    puts("Game cheated!");
  } else {
    printf("%I64d\n", res);
  }
  return 0;
}
