#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000000 + 7;
const int MAXN = 100000 + 5;
const int MAXK = 200 + 5;
const int inf = 1 << 13;
int n;
int k;
vector<int> sz;
vector<int> st;
vector<int> partially;
short dp[MAXK][MAXN][3];
short dp2[MAXK][MAXN][3];
struct MonotonicQueue {
  queue<int> q;
  deque<int> dq;
  void pop() {
    if (q.size()) {
      int x = q.front();
      q.pop();
      if (dq.front() == x) dq.pop_front();
    }
  }
  void push(int x) {
    q.push(x);
    while (dq.size() && dq.back() > x) dq.pop_back();
    dq.push_back(x);
  }
  int getMin() { return dq.back(); }
  int getFront() { return q.front(); }
};
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  int lst = 0;
  sz.push_back(0);
  partially.push_back(0);
  st.push_back(0);
  for (int i = 0; i < k; i++) {
    int s, e;
    cin >> s >> e;
    if (s != lst)
      sz.push_back(s - lst), st.push_back(lst), partially.push_back(0);
    sz.push_back(e - s), st.push_back(s), partially.push_back(1);
    lst = e;
  }
  if (lst != 2 * n)
    sz.push_back(2 * n - lst), st.push_back(lst), partially.push_back(0);
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < 3; j++) dp[sz.size()][i][j] = dp2[0][i][j] = inf;
  for (int idx = (int)sz.size() - 1; idx >= 1; idx--) {
    for (int rem = 0; rem <= n; rem++) {
      for (int lstTake = 0; lstTake < 3; lstTake++) {
        short &ret = dp[idx][rem][lstTake];
        ret = dp[idx + 1][rem][0] + (lstTake == 1);
        if (rem >= sz[idx])
          ret = min((int)ret, dp[idx + 1][rem - sz[idx]][1] + (lstTake == 0));
      }
    }
  }
  for (int idx = 1; idx < sz.size(); idx++) {
    for (int rem = 0; rem <= n; rem++) {
      for (int lstTake = 0; lstTake < 3; lstTake++) {
        short &ret = dp2[idx][rem][lstTake];
        ret = dp2[idx - 1][rem][0] + (lstTake == 1);
        if (rem >= sz[idx])
          ret = min((int)ret, dp2[idx - 1][rem - sz[idx]][1] + (lstTake == 0));
      }
    }
  }
  int ans = dp2[sz.size() - 1][n][2];
  assert(ans == dp[1][n][2]);
  for (int idx = 1; idx < sz.size(); idx++) {
    if (partially[idx] == 0) continue;
    int l = n + 1, r = n;
    MonotonicQueue q0, q1;
    int p = sz[idx];
    int s = st[idx];
    int e = st[idx] + sz[idx];
    for (int i = 0; i <= n; i++) {
      while (l > n - i - p) {
        l--;
        if (l >= 0) {
          q0.push(dp2[idx - 1][l][0]);
          q1.push(dp2[idx - 1][l][1]);
        }
      }
      while (r > n - i) {
        r--;
        q0.pop();
        q1.pop();
      }
      int ans0 = 1 + dp[idx + 1][i][0] + q1.getMin();
      int ans1 = 1 + dp[idx + 1][i][1] + q0.getMin();
      ans = min(ans, min(ans0, ans1));
    }
  }
  if (ans >= inf)
    cout << "Hungry\n";
  else {
    cout << "Full\n";
    cout << ans << "\n";
  }
  return 0;
}
