#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long> > all, answer;
long long left(long long now, long long now_level, long long last_level) {
  int i;
  for (i = now_level + 1; i <= last_level; i++) now *= 2;
  return now;
}
long long right(long long now, long long now_level, long long last_level) {
  int i;
  for (i = now_level + 1; i <= last_level; i++) {
    now *= 2;
    now++;
  }
  return now;
}
int main() {
  long long h, l, r;
  int q;
  scanf("%I64d", &h);
  scanf("%I64d", &q);
  int i;
  l = (1ll << (h - 1));
  r = (1ll << (h)) - 1;
  for (i = 0; i < q; i++) {
    long long temp_l, temp_r, temp_h;
    int w;
    scanf("%I64d", &temp_h);
    scanf("%I64d", &temp_l);
    scanf("%I64d", &temp_r);
    scanf("%d", &w);
    temp_l = left(temp_l, temp_h, h);
    temp_r = right(temp_r, temp_h, h);
    if (w) {
      l = max(l, temp_l);
      r = min(r, temp_r);
    } else {
      all.push_back({temp_l, temp_r});
    }
  }
  if (l > r) {
    printf("Game cheated!\n");
    return 0;
  }
  sort(all.begin(), all.end());
  bool is = false;
  for (i = 0; i < all.size(); i++) {
    if (all[i].second < l || all[i].first > r) continue;
    is = true;
    if (all[i].first > l) answer.push_back({l, min(all[i].first - 1, r)});
    l = max(all[i].second + 1, l);
    if (l > r) break;
  }
  if (l <= r) answer.push_back({l, r});
  if (!is) {
    if (l == r)
      printf("%I64d\n", l);
    else
      printf("Data not sufficient!\n");
    return 0;
  }
  if (answer.size() == 0) {
    printf("Game cheated!\n");
    return 0;
  }
  long long total = 0;
  for (i = 0; i < answer.size(); i++)
    total += (answer[i].second - answer[i].first + 1);
  if (total == 1)
    printf("%I64d\n", answer[0].first);
  else
    printf("Data not sufficient!\n");
  return 0;
}
