#include <bits/stdc++.h>
using namespace std;
set<pair<long long, long long> > S;
set<pair<long long, long long> >::iterator it;
set<pair<long long, long long> >::iterator it2;
pair<long long, long long> temp;
void intersect_yes(long long s, long long e) {
  if (S.empty()) return;
  for (it = S.begin(); it != S.end();) {
    if (it->first < s && it->second < s)
      S.erase(it++);
    else
      break;
  }
  if (S.empty()) return;
  bool finish = 0;
  for (it = --S.end(); !finish;) {
    if (it == S.begin()) finish = true;
    if (it->first > e)
      S.erase(it--);
    else
      break;
  }
  if (S.empty()) return;
  temp = *S.begin();
  S.erase(temp);
  temp.first = max(s, temp.first);
  S.insert(temp);
  temp = *(--S.end());
  S.erase(temp);
  temp.second = min(temp.second, e);
  S.insert(temp);
}
const long long big = 1LL << 55;
void intersect_no(long long s, long long e) {
  it = S.lower_bound(make_pair(s, big));
  if (it != S.begin()) it--;
  it2 = S.upper_bound(make_pair(e, big));
  while (it != it2) {
    if (it->second < s)
      it++;
    else if (it->first < s) {
      if (it->second >= s && it->second <= e) {
        temp = *it;
        it++;
        S.erase(temp);
        S.insert(make_pair(temp.first, s - 1));
      } else if (it->second > e) {
        temp = *it;
        it++;
        S.erase(temp);
        S.insert(make_pair(temp.first, s - 1));
        S.insert(make_pair(e + 1, temp.second));
      }
    } else if (it->first >= s && it->first <= e) {
      if (it->second <= e) {
        S.erase(it++);
      } else if (it->second > e) {
        temp = *it;
        it++;
        S.erase(temp);
        S.insert(make_pair(e + 1, temp.second));
      }
    }
  }
}
int main() {
  int h, q, lvl, ans;
  long long l, r;
  scanf("%d%d", &h, &q);
  long long begining = 1LL << (h - 1), ending = (1LL << h) - 1;
  S.insert(make_pair(begining, ending));
  for (int i = 0; i < q; i++) {
    scanf("%d%I64d%I64d%d", &lvl, &l, &r, &ans);
    long long left = l * (1LL << (h - lvl)),
              right = (r + 1) * (1LL << (h - lvl)) - 1;
    if (S.empty()) {
      printf("Game cheated!\n");
      return 0;
    }
    if (ans)
      intersect_yes(left, right);
    else
      intersect_no(left, right);
  }
  if (S.empty())
    printf("Game cheated!\n");
  else if (S.size() == 1 && (*S.begin()).first == (*S.begin()).second)
    printf("%I64d\n", (*S.begin()).first);
  else
    printf("Data not sufficient!\n");
}
