#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
const int INF = 1e3 + 5;
int seg[2][4 * MAXN];
int dp[2][101][MAXN];
int l[102], r[102];
int cur;
inline void build(int node, int start, int end) {
  if (start == end) {
    seg[0][node] = dp[0][cur][start];
    seg[1][node] = dp[1][cur][start];
    return;
  }
  int mid = (start + end) >> 1;
  build(2 * node, start, mid);
  build(2 * node + 1, mid + 1, end);
  seg[0][node] = min(seg[0][2 * node], seg[0][2 * node + 1]);
  seg[1][node] = min(seg[1][2 * node], seg[1][2 * node + 1]);
}
inline int get(int node, int start, int end, bool f, int qs, int qe) {
  if (start > end or qe < start or qs > end) return INF;
  if (start >= qs and end <= qe) return seg[f][node];
  int mid = (start + end) >> 1;
  return min(get(2 * node, start, mid, f, qs, qe),
             get(2 * node + 1, mid + 1, end, f, qs, qe));
}
int main() {
  int n, k;
  cin >> n >> k;
  for (int i = 1; i <= k; i++) scanf("%d%d", &l[i], &r[i]);
  int tot = r[k] - l[k];
  int add = 2 * n - r[k];
  for (int i = 0; i < 2; i++)
    for (int j = 1; j <= k; j++)
      for (int p = 0; p <= 2 * n; p++) dp[i][j][p] = INF;
  dp[1][k][tot + add] = 0;
  dp[0][k][0] = 0;
  for (int i = 0; i <= tot; i++) {
    dp[1][k][i] = min(dp[1][k][i], 1);
    dp[0][k][tot - i + add] = min(dp[0][k][tot - i + add], 1);
    dp[1][k][tot - i + add] = min(dp[1][k][tot - i + add], 2);
    dp[0][k][i] = min(dp[0][k][i], 2);
  }
  for (int segment = k - 1; segment >= 1; segment--) {
    int add = l[segment + 1] - r[segment];
    int tot = r[segment] - l[segment];
    cur = segment + 1;
    build(1, 0, 2 * n - l[segment + 1]);
    for (int sec = 0; sec <= 2 * n - l[segment]; sec++) {
      if (sec - add - tot >= 0)
        dp[1][segment][sec] =
            min(dp[1][segment][sec], dp[1][segment + 1][sec - add - tot]);
      dp[1][segment][sec] =
          min(dp[1][segment][sec],
              1 + get(1, 0, 2 * n - l[segment + 1], 0, sec - tot, sec));
      dp[1][segment][sec] = min(
          dp[1][segment][sec],
          2 + get(1, 0, 2 * n - l[segment + 1], 1, sec - add - tot, sec - add));
      dp[0][segment][sec] = min(dp[0][segment][sec], dp[0][segment + 1][sec]);
      dp[0][segment][sec] = min(
          dp[0][segment][sec],
          1 + get(1, 0, 2 * n - l[segment + 1], 1, sec - add - tot, sec - add));
      dp[0][segment][sec] =
          min(dp[0][segment][sec],
              2 + get(1, 0, 2 * n - l[segment + 1], 0, sec - tot, sec));
    }
  }
  int ans;
  if (n >= l[1])
    ans = dp[1][1][n - l[1]];
  else
    ans = INF;
  if (ans >= 1000)
    cout << "Hungry\n";
  else
    cout << "Full\n" << ans << endl;
  return 0;
}
