#include <bits/stdc++.h>
using namespace std;
int n, k, dp[101][2][200002];
pair<int, int> lr[104];
const int inf = 1e9;
int seg[2][1000001];
void build(int idx, int lo, int hi, int which) {
  if (lo == hi) {
    seg[0][idx] = dp[which][0][lo - 1];
    seg[1][idx] = dp[which][1][lo - 1];
    return;
  }
  int mid = (lo + hi) / 2;
  build(2 * idx, lo, mid, which);
  build(2 * idx + 1, mid + 1, hi, which);
  seg[0][idx] = min(seg[0][2 * idx], seg[0][2 * idx + 1]);
  seg[1][idx] = min(seg[1][2 * idx], seg[1][2 * idx + 1]);
}
int query(int side, int idx, int lo, int hi, int st, int en) {
  if (lo == st && hi == en) return seg[side][idx];
  int mid = (lo + hi) / 2;
  if (en <= mid)
    return query(side, 2 * idx, lo, mid, st, en);
  else if (st > mid)
    return query(side, 2 * idx + 1, mid + 1, hi, st, en);
  else
    return min(query(side, 2 * idx, lo, mid, st, mid),
               query(side, 2 * idx + 1, mid + 1, hi, mid + 1, en));
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> k;
  for (int i = 1; i <= k; ++i) cin >> lr[i].first >> lr[i].second;
  for (int side = 0; side <= 1; ++side) {
    for (int ti = 0; ti <= lr[k].second - lr[k].first; ++ti)
      dp[k][side][ti] = 1;
    for (int ti = lr[k].second - lr[k].first + 1; ti <= 2 * n - lr[k].first;
         ++ti) {
      if (2 * n - lr[k].first - ti <= lr[k].second - lr[k].first)
        dp[k][side][ti] = 2;
      else
        dp[k][side][ti] = inf;
    }
    dp[k][side][2 * n - lr[k].first] = 0;
  }
  for (int i = k - 1; i >= 1; i--) {
    build(1, 1, 2 * n + 1, i + 1);
    for (int side = 0; side <= 1; ++side) {
      dp[i][side][0] = 1;
      for (int ti = 1; ti <= 2 * n - lr[i].first; ++ti) {
        dp[i][side][ti] = inf;
        if (lr[i + 1].first - lr[i].first <= ti &&
            ti - (lr[i + 1].first - lr[i].first) <= 2 * n - lr[i + 1].first) {
          dp[i][side][ti] =
              min(dp[i][side][ti],
                  dp[i + 1][side][ti - (lr[i + 1].first - lr[i].first)]);
        }
        int lb = max(lr[i].first + 1, lr[i + 1].first - ti);
        int ub = min(lr[i].second, 2 * n - ti);
        if (lb <= ub) {
          int off = ti - lr[i + 1].first + 1;
          dp[i][side][ti] =
              min(dp[i][side][ti],
                  2 + query(side, 1, 1, 2 * n + 1, off + lb, off + ub));
        }
        lb = max(lr[i].first, lr[i + 1].first + ti + lr[i].first - 2 * n);
        ub = min(lr[i].second, lr[i].first + ti);
        if (lb <= ub) {
          int off = 2 * n - lr[i].first - ti - lr[i + 1].first + 1;
          dp[i][side][ti] =
              min(dp[i][side][ti],
                  1 + query(!side, 1, 1, 2 * n + 1, off + lb, off + ub));
        }
      }
      dp[i][side][2 * n - lr[i].first] = 0;
    }
  }
  int tgone = lr[1].first;
  int tleft = n - tgone;
  if (tleft < 0 || tleft > 2 * n - lr[1].first)
    cout << "Hungry\n";
  else if (dp[1][1][tleft] >= inf - 2)
    cout << "Hungry\n";
  else
    cout << "Full\n" << dp[1][1][tleft] << '\n';
}
