#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, k, l[N], r[N], f[2][N], q[N];
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= k; ++i) scanf("%d%d", &l[i], &r[i]);
  f[0][0] = 0;
  for (int i = 1; i <= (n << 1); ++i) f[0][i] = 0x3f3f3f3f;
  for (int i = 1; i <= k; ++i) {
    int cur = i & 1, last = !cur;
    memset(f[cur], 0x3f, sizeof(int) * (n + 1));
    int L = 1, R = 0, now = 0;
    for (int j = min(n, r[i]); j >= 0; --j) {
      f[cur][j] = f[last][j];
      int ql = l[i] - j, qr = min(r[i] - j, n);
      while (now <= qr) {
        while (L <= R && f[last][q[R]] > f[last][now]) --R;
        q[++R] = now;
        ++now;
      }
      while (L <= R && q[L] < ql) ++L;
      f[cur][j] = min(f[cur][j], f[last][q[L]] + 1);
    }
    L = 1, R = 0;
    now = 0;
    for (int j = 0; j <= n && j <= r[i]; ++j) {
      int ql = j + l[i] - r[i], qr = j;
      while (now <= qr) {
        while (L <= R && f[last][q[R]] > f[last][now]) --R;
        q[++R] = now;
        ++now;
      }
      while (L <= R && q[L] < ql) ++L;
      f[cur][j] = min(f[cur][j], f[last][q[L]] + 2);
    }
  }
  if (f[k & 1][n] == 0x3f3f3f3f) {
    puts("Hungry");
    return 0;
  }
  puts("Full");
  printf("%d\n", f[k & 1][n]);
  return 0;
}
