#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100, K = 110;
int n, k, l[K], r[K];
struct node {
  int MIN[2];
} sh[2][N * 4];
inline void pushup(int cur, int x) {
  sh[cur][x].MIN[0] = min(sh[cur][x + x].MIN[0], sh[cur][x + x + 1].MIN[0]);
  sh[cur][x].MIN[1] = min(sh[cur][x + x].MIN[1], sh[cur][x + x + 1].MIN[1]);
}
inline void change(int cur, int x, int l, int r, int wh, int v, int kind) {
  if (l == r) {
    sh[cur][x].MIN[kind] = v;
    return;
  }
  int mid = (l + r) >> 1;
  if (wh <= mid)
    change(cur, x + x, l, mid, wh, v, kind);
  else
    change(cur, x + x + 1, mid + 1, r, wh, v, kind);
  pushup(cur, x);
}
inline int query(int cur, int x, int l, int r, int ll, int rr, int kind) {
  if (ll <= l && rr >= r) return sh[cur][x].MIN[kind];
  int mid = (l + r) >> 1, ans = 0x3f3f3f3f;
  if (ll <= mid) ans = min(ans, query(cur, x + x, l, mid, ll, rr, kind));
  if (rr > mid) ans = min(ans, query(cur, x + x + 1, mid + 1, r, ll, rr, kind));
  return ans;
}
int main() {
  scanf("%d%d", &n, &k);
  n++;
  for (int i = 1; i <= k; i++) scanf("%d%d", &l[i], &r[i]);
  l[k + 1] = 2 * (n - 1);
  memset(sh, 0x3f, sizeof(sh));
  change(0, 1, 1, n, l[1] + 1, 0, 1);
  int cur = 1;
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= n; j++) {
      int MIN = 0x3f3f3f3f;
      MIN = min(MIN, query(cur ^ 1, 1, 1, n, j, j, 0));
      MIN =
          min(MIN, query(cur ^ 1, 1, 1, n, max(1, j - r[i] + l[i]), j, 1) + 1);
      MIN = min(MIN,
                query(cur ^ 1, 1, 1, n, max(1, j - (r[i] - l[i])), j, 0) + 2);
      change(cur, 1, 1, n, j, MIN, 0);
      MIN = 0x3f3f3f3f;
      if (j - l[i + 1] + l[i] > 0)
        MIN = min(MIN, query(cur ^ 1, 1, 1, n, j - l[i + 1] + l[i],
                             j - l[i + 1] + l[i], 1));
      if (j - l[i + 1] + r[i] <= 0) continue;
      MIN = min(MIN, query(cur ^ 1, 1, 1, n, max(1, j - l[i + 1] + l[i]),
                           j - l[i + 1] + r[i], 0) +
                         1);
      MIN = min(MIN, query(cur ^ 1, 1, 1, n,
                           max(1, j - l[i + 1] + r[i] - (r[i] - l[i])),
                           j - l[i + 1] + r[i], 1) +
                         2);
      change(cur, 1, 1, n, j, MIN, 1);
    }
    cur ^= 1;
    memset(sh[cur], 0x3f, sizeof(sh[cur]));
  }
  cur ^= 1;
  int ans = min(query(cur, 1, 1, n, n, n, 0), query(cur, 1, 1, n, n, n, 1));
  if (ans == 0x3f3f3f3f)
    printf("Hungry\n");
  else
    printf("Full\n%d\n", ans);
}
