#include <bits/stdc++.h>
using namespace std;
void maximiza(int &a, int b) { a = max(a, b); }
const int limite = 300;
void arregla(vector<pair<int, int> > &v) {
  sort(v.begin(), v.end());
  vector<pair<int, int> > nextv;
  for (int i = 0; i < int(v.size()); i++) {
    nextv.push_back(pair<int, int>(v[i]));
    while (i + 1 < int(v.size()) and v[i + 1].first <= nextv.back().second) {
      maximiza(nextv.back().second, v[i + 1].second);
      i++;
    }
  }
  v = nextv;
}
vector<pair<int, int> > puede[limite][2], nextpuede[limite][2];
void escribe(vector<pair<int, int> > v) {
  for (int i = 0; i < int(v.size()); i++)
    cout << "(" << v[i].first << "," << v[i].second << ")";
  cout << endl;
}
void escribe() {
  for (int k = 0; k < limite; k++) {
    for (int q = 0; q < 2; q++) {
      vector<pair<int, int> > &v = puede[k][q];
      if (int(v.size())) {
        cout << "k " << k << " q " << q << endl;
        escribe(v);
      }
    }
  }
}
void reset() {
  for (int k = 0; k < limite; k++) {
    for (int q = 0; q < 2; q++) {
      arregla(nextpuede[k][q]);
      puede[k][q] = nextpuede[k][q];
      nextpuede[k][q] = vector<pair<int, int> >();
    }
  }
}
void fijo(int t) {
  for (int k = 0; k < limite; k++) {
    for (int q = 0; q < 2; q++) {
      int tt = t;
      if (q == 1) tt = -t;
      vector<pair<int, int> > &v = puede[k][q];
      for (int i = 0; i < int(v.size()); i++) {
        pair<int, int> &p = v[i];
        p.first += tt;
        p.second += tt;
      }
    }
  }
}
void variable(int t) {
  for (int k = 0; k < limite; k++) {
    for (int q = 0; q < 2; q++) {
      int tt = t;
      if (q == 1) tt = -t;
      vector<pair<int, int> > &v = puede[k][q];
      for (int i = 0; i < int(v.size()); i++) {
        pair<int, int> p = v[i];
        int l = p.first;
        int r = p.second;
        nextpuede[k][q].push_back(pair<int, int>(l + tt, r + tt));
        nextpuede[k + 2][q].push_back(pair<int, int>(l - t, r + t));
        nextpuede[k + 1][1 - q].push_back(pair<int, int>(l - t, r + t));
      }
    }
  }
  reset();
}
vector<int> lista;
bool logra(vector<pair<int, int> > &v) {
  for (int i = 0; i < int(v.size()); i++)
    if (v[i].first <= 0 and v[i].second >= 0) return true;
  return false;
}
int main() {
  int n, k;
  cin >> n >> k;
  lista.push_back(0);
  for (int i = 1; i <= k; i++) {
    int l, r;
    cin >> l >> r;
    lista.push_back(l);
    lista.push_back(r);
  }
  lista.push_back(2 * n);
  puede[0][0].push_back(pair<int, int>(0, 0));
  for (int i = 0; i < int(lista.size()) - 1; i++) {
    if (i % 2 == 0)
      fijo(lista[i + 1] - lista[i]);
    else
      variable(lista[i + 1] - lista[i]);
  }
  for (int i = 0; i < limite; i++) {
    if (logra(puede[i][0]) or logra(puede[i][1])) {
      cout << "Full" << endl;
      cout << i << endl;
      exit(0);
    }
  }
  cout << "Hungry" << endl;
}
