#include <bits/stdc++.h>
const int MAXN = 100010;
int base1[MAXN][2], base2[MAXN][2];
typedef int (*type)[2];
type f1 = base1, f2 = base2;
int n, k;
int qu[MAXN], tm[MAXN], hd, tl;
inline void pushIn(int val, int ti) {
  while (hd < tl && qu[tl] >= val) tl--;
  qu[++tl] = val, tm[tl] = ti;
  return;
}
inline void pop(int ti) {
  while (hd < tl && tm[hd + 1] <= ti) hd++;
  return;
}
void debug(const char* s) {
  printf("%s :\n", s);
  for (int i = 0; i <= n; ++i)
    printf("when i = %d : (%d, %d)\n", i,
           f2[i][0] == 0x7f7f7f7f ? -1 : f2[i][0],
           f2[i][1] == 0x7f7f7f7f ? -1 : f2[i][1]);
  puts("qwq");
}
int l[MAXN], r[MAXN];
int main() {
  scanf("%d%d", &n, &k);
  int lasr = 0;
  memset(f1, 0x7f, sizeof(base1));
  f1[0][0] = 0;
  for (int i = 1; i <= k; ++i) scanf("%d%d", l + i, r + i);
  l[++k] = n << 1, r[k] = n << 1;
  for (int i = 1; i <= k; ++i, std::swap(f1, f2)) {
    memset(f2, 0x7f, sizeof(base1));
    int l = ::l[i], r = ::r[i], kaosu, len;
    kaosu = l - lasr, lasr = r;
    if (l == r) {
      for (int j = (std::max(kaosu, r - n)), jend = (std::min(r, n)); j <= jend;
           ++j)
        ((f2[j][0]) = std::min((f2[j][0]), (f1[j - kaosu][0]))),
            ((f2[j][1]) = std::min((f2[j][1]), (f1[j - kaosu][0] + 1)));
      for (int j = (std::max(0, r - n)), jend = (std::min(r, n)); j <= jend;
           ++j)
        ((f2[j][1]) = std::min((f2[j][1]), (f1[j][1]))),
            ((f2[j][0]) = std::min((f2[j][0]), (f1[j][1] + 1)));
      ((void)0);
      continue;
    }
    len = r - l;
    for (int j = (std::max(kaosu + len, r - n)), jend = (std::min(r, n));
         j <= jend; ++j)
      ((f2[j][0]) = std::min((f2[j][0]), (f1[j - kaosu - len][0])));
    for (int j = (std::max(0, r - n)), jend = (std::min(r, n)); j <= jend; ++j)
      ((f2[j][1]) = std::min((f2[j][1]), (f1[j][1])));
    ((void)0);
    hd = tl = 0;
    pushIn(f1[0][0], 0);
    for (int j = (kaosu), jend = (std::min(r, n)); j <= jend; ++j) {
      if (j >= r - n && hd < tl)
        ((f2[j][1]) = std::min((f2[j][1]), (qu[hd + 1] + 1))),
            ((f2[j][0]) = std::min((f2[j][0]), (qu[hd + 1] + 2)));
      pop(j - kaosu - len), pushIn(f1[j + 1 - kaosu][0], j + 1 - kaosu);
    }
    ((void)0);
    hd = tl = 0;
    pushIn(f1[0][1], 0);
    for (int j = (0), jend = (std::min(r, n)); j <= jend; ++j) {
      if (j >= r - n && hd < tl)
        ((f2[j][0]) = std::min((f2[j][0]), (qu[hd + 1] + 1))),
            ((f2[j][1]) = std::min((f2[j][1]), (qu[hd + 1] + 2)));
      pop(j - len);
      pushIn(f1[j + 1][1], j + 1);
    }
    ((void)0);
  }
  int ans = std::min(f1[n][0], f1[n][1]);
  if (ans == 0x7f7f7f7f)
    puts("Hungry");
  else
    printf("Full\n%d\n", ans);
  return 0;
}
