#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:36777216")
const int Nmax = 100100;
const int Drection[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
int h, q;
long long minV[55], maxV[55];
long long leftDown(long long L, int hg) {
  if (hg == h) return L;
  return leftDown(L << 1ll, hg + 1);
}
long long rightDown(long long R, int hg) {
  if (hg == h) return R;
  return rightDown((R << 1ll) + 1, hg + 1);
}
inline void end(long long x) {
  if (x == 0)
    cout << "Data not sufficient!" << endl;
  else if (x == -1)
    cout << "Game cheated!" << endl;
  else
    cout << x << endl;
  exit(0);
}
inline void add(long long x) {
  static long long extra = -1;
  if (x <= 0) end(extra);
  if (extra != -1) end(0);
  extra = x;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> h >> q;
  minV[1] = maxV[1] = 1;
  for (int i = 2; i <= h; i++) {
    minV[i] = minV[i - 1] * 2ll;
    maxV[i] = maxV[i - 1] * 2ll + 1;
  }
  vector<pair<long long, long long> > list;
  for (int i = 1; i <= q; i++) {
    long long lv, L, R, ans;
    cin >> lv >> L >> R >> ans;
    if (ans == 1) {
      if (minV[lv] <= L - 1)
        list.push_back(make_pair(leftDown(minV[lv], lv), rightDown(L - 1, lv)));
      if (R + 1 <= maxV[lv])
        list.push_back(make_pair(leftDown(R + 1, lv), rightDown(maxV[lv], lv)));
    } else
      list.push_back(make_pair(leftDown(L, lv), rightDown(R, lv)));
  }
  sort(list.begin(), list.end());
  long long L = leftDown(1, 1);
  long long R = rightDown(1, 1);
  for (int i = 0; i < list.size(); i++) {
    if (list[i].first > L) {
      add(L++);
      i--;
      continue;
    }
    L = max(L, list[i].second + 1);
  }
  while (L <= R) add(L++);
  add(-10);
  return 0;
}
