#include <bits/stdc++.h>
template <class T>
inline bool cmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
template <class T>
inline bool cmin(T& a, const T& b) {
  return a > b ? a = b, 1 : 0;
}
using namespace std;
char ss[1 << 17], *A = ss, *B = ss;
inline char gc() {
  return A == B && (B = (A = ss) + fread(ss, 1, 1 << 17, stdin), A == B) ? -1
                                                                         : *A++;
}
template <class T>
inline void sd(T& x) {
  char c;
  T y = 1;
  while (c = gc(), (c < 48 || 57 < c) && c != -1)
    if (c == 45) y = -1;
  x = c - 48;
  while (c = gc(), 47 < c && c < 58) x = x * 10 + c - 48;
  x *= y;
}
const int N = 2e5 + 5, inf = 1e9;
typedef int arr[N];
int n, k, p;
arr q, f[2];
int main() {
  sd(n), sd(k);
  int l, r, h, t;
  f[0][0] = 0;
  for (register int i = 1, I = n + 1; i < I; ++i) f[0][i] = inf;
  while (k--) {
    sd(l), sd(r);
    p ^= 1;
    h = 1, t = 0;
    memcpy(f[p], f[p ^ 1], sizeof f[p]);
    for (register int j = 0, I = min(n, r) + 1; j < I; ++j) {
      while (h <= t && f[p ^ 1][j] <= f[p ^ 1][q[t]]) --t;
      while (h <= t && q[h] < j - (r - l)) ++h;
      q[++t] = j;
      cmin(f[p][j], f[p ^ 1][q[h]] + 2);
    }
    h = 1, t = 0;
    for (register int j = r, I = 0 - 1; j > I; --j) {
      while (h <= t && f[p ^ 1][r - j] <= f[p ^ 1][q[t]]) --t;
      while (h <= t && q[h] < l - j) ++h;
      q[++t] = r - j;
      cmin(f[p][j], f[p ^ 1][q[h]] + 1);
    }
  }
  if (f[p][n] ^ inf)
    printf("Full\n%d", f[p][n]);
  else
    puts("Hungry");
  return 0;
}
