#include <bits/stdc++.h>
using namespace std;
class minQ {
  deque<tuple<int, int> > p;
  int delta, sz;

 public:
  minQ() : delta(0), sz(0) {}
  inline int size() const { return sz; }
  inline void add(int x) { delta += x; }
  inline void push(int x) {
    x -= delta;
    int t = 1;
    while (p.size() > 0 && get<0>(p.back()) >= x)
      t += get<1>(p.back()), p.pop_back();
    p.emplace_back(x, t);
    sz++;
  }
  inline void pop() {
    get<1>(p.front())--;
    if (!get<1>(p.front())) p.pop_front();
    sz--;
  }
  inline int getmin() const { return get<0>(p.front()) + delta; }
};
int dp[105][300005][2];
int l[111], r[111], k, n;
inline void mn(int &a, int b) {
  if (b < a) a = b;
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 0; i < k; i++) scanf("%d %d", l + i, r + i);
  l[k] = n + n;
  for (int i = 0; i < 300005; i++)
    for (int j = 0; j < 105; j++) dp[j][i][0] = dp[j][i][1] = 1e9;
  int m = n + n;
  dp[k][n][0] = dp[k][n][1] = 0;
  for (int i = k - 1; i >= 0; i--) {
    minQ a, b;
    for (int w = 1; w <= r[i] - l[i]; w++) a.push(dp[i + 1][w][1]);
    for (int w = l[i + 1] - r[i]; w <= l[i + 1] - l[i] - 1; w++)
      b.push(dp[i + 1][w][0]);
    for (int qnt = 0; qnt <= n; qnt++) {
      mn(dp[i][qnt][0], dp[i + 1][qnt + l[i + 1] - l[i]][0]);
      mn(dp[i][qnt][0], dp[i + 1][qnt][1] + 1);
      mn(dp[i][qnt][1], dp[i + 1][qnt][1]);
      mn(dp[i][qnt][1], dp[i + 1][qnt + l[i + 1] - l[i]][0] + 1);
      if (a.size()) mn(dp[i][qnt][0], a.getmin() + 1);
      if (a.size()) mn(dp[i][qnt][1], a.getmin() + 2);
      if (b.size()) mn(dp[i][qnt][0], b.getmin() + 2);
      if (b.size()) mn(dp[i][qnt][1], b.getmin() + 1);
      a.pop(), b.pop();
      a.push(dp[i + 1][qnt + 1 + r[i] - l[i]][1]);
      b.push(dp[i + 1][qnt + 1 + l[i + 1] - l[i] - 1][0]);
    }
  }
  int ans = dp[0][l[0]][0];
  if (ans > m)
    printf("Hungry\n");
  else {
    printf("Full\n");
    printf("%d\n", ans);
  }
}
