#include <bits/stdc++.h>
using namespace std;
int dp[2][100010][2];
int l[100010], r[100010];
int lst;
int n, k;
int ans;
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= k; i++) scanf("%d%d", l + i, r + i);
  k++;
  l[k] = r[k] = 2 * n;
  for (int j = 0; j <= n; j++) dp[0][j][0] = dp[0][j][1] = 1e9;
  dp[0][0][0] = 0;
  for (int i = 1; i <= k; i++) {
    int ii = i & 1;
    for (int j = 0; j <= n; j++) dp[ii][j][0] = dp[ii][j][1] = 1e9;
    int prv = l[i] - lst;
    int dis = r[i] - l[i];
    multiset<int> all;
    int sz = 0;
    for (int j = prv; j <= n; j++) {
      if (j >= prv + dis)
        dp[ii][j][0] = min(dp[ii][j][0], dp[ii ^ 1][j - prv - dis][0]);
      all.insert(dp[ii ^ 1][j - prv][0]);
      sz++;
      if (sz > dis + 1) {
        all.erase(all.find(dp[ii ^ 1][j - prv - dis - 1][0]));
        sz--;
      }
      dp[ii][j][0] = min(dp[ii][j][0], *(all.begin()) + 2);
      dp[ii][j][1] = min(dp[ii][j][1], *(all.begin()) + 1);
    }
    all.clear();
    sz = 0;
    for (int j = 0; j <= n; j++) {
      dp[ii][j][1] = min(dp[ii][j][1], dp[ii ^ 1][j][1]);
      all.insert(dp[ii ^ 1][j][1]);
      sz++;
      if (sz > dis + 1) {
        all.erase(all.find(dp[ii ^ 1][j - dis - 1][1]));
        sz--;
      }
      dp[ii][j][1] = min(dp[ii][j][1], *(all.begin()) + 2);
      dp[ii][j][0] = min(dp[ii][j][0], *(all.begin()) + 1);
    }
    lst = r[i];
  }
  ans = min(dp[k & 1][n][0], dp[k & 1][n][1]);
  if (ans == 1e9)
    printf("Hungry");
  else
    printf("Full\n%d", ans);
  return 0;
}
