#include <bits/stdc++.h>
using namespace std;
int h, q;
vector<pair<pair<long long, int>, int> > ve;
long long getl(long long h, long long v) {
  for (int k = 0; k < h; k++) {
    v *= 2ll;
  }
  return v;
}
long long getr(long long h, long long v) {
  for (int k = 0; k < h; k++) {
    v = 2ll * v + 1ll;
  }
  return v;
}
void insert(long long lh, long long rh, int id) {
  if (lh <= rh) {
    ve.push_back(make_pair(make_pair(lh, 0), id));
    ve.push_back(make_pair(make_pair(rh, 1), id));
  }
}
long long solve() {
  sort((ve).begin(), (ve).end());
  set<int> se;
  set<long long> sol;
  for (int i = 0; i < ve.size(); i++) {
    if (se.count(ve[i].second) == 0) {
      se.insert(ve[i].second);
      if (se.size() == q + 1) {
        sol.insert(ve[i].first.first);
      }
    } else {
      if (se.size() == q + 1) {
        sol.insert(ve[i].first.first);
      }
      se.erase(ve[i].second);
    }
  }
  if (sol.size() == 0) {
    return -2;
  } else if (sol.size() != 1) {
    return -1;
  }
  return *sol.begin();
}
int main() {
  cin >> h >> q;
  long long lh, rh;
  lh = getl(h - 1, 1);
  rh = getr(h - 1, 1);
  long long lh1, rh1;
  insert(lh, rh, q);
  long long li, ri, hi, ai;
  for (int i = 0; i < q; i++) {
    cin >> hi >> li >> ri >> ai;
    if (ai == 1) {
      lh1 = getl(h - hi, li);
      rh1 = getr(h - hi, ri);
      insert(lh1, rh1, i);
    } else {
      rh1 = getl(h - hi, li) - 1;
      lh1 = getr(h - hi, ri) + 1;
      insert(lh, rh1, i);
      insert(lh1, rh, i);
    }
  }
  long long res = solve();
  if (res == -1) {
    cout << "Data not sufficient!" << endl;
  } else if (res == -2) {
    cout << "Game cheated!" << endl;
  } else {
    cout << res << endl;
  }
  return 0;
}
