#include <bits/stdc++.h>
using namespace std;
template <class T, class U>
void ckmin(T &a, U b) {
  if (a > b) a = b;
}
template <class T, class U>
void ckmax(T &a, U b) {
  if (a < b) a = b;
}
int N, K;
pair<int, int> arr[213];
vector<pair<int, int> > blocks;
int dp[100013][2];
int tmp[100013][2];
int ans;
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout << fixed << setprecision(12);
  cerr << fixed << setprecision(4);
  cin >> N >> K;
  for (auto i = (0); i < (K); i++) {
    cin >> arr[i].first >> arr[i].second;
    if (i == 0 && arr[i].first > 0) {
      blocks.push_back({arr[i].first, 0});
    }
    if (i > 0) {
      blocks.push_back({arr[i].first - arr[i - 1].second, 0});
    }
    blocks.push_back({arr[i].second - arr[i].first, 1});
  }
  if (arr[K - 1].second != 2 * N) {
    blocks.push_back({2 * N - arr[K - 1].second, 0});
  }
  for (auto i = (0); i < (N + 1); i++) {
    dp[i][0] = 1000000007;
    dp[i][1] = 1000000007;
  }
  dp[0][0] = 0;
  dp[0][1] = 0;
  for (pair<int, int> p : blocks) {
    int sz = p.first;
    if (!p.second) {
      for (auto i = (N + 1) - 1; i >= (sz); i--) {
        dp[i][0] = dp[i - sz][0];
      }
      for (auto i = (sz)-1; i >= (0); i--) {
        dp[i][0] = 1000000007;
      }
    } else {
      for (auto i = (0); i < (N + 1); i++) {
        tmp[i][0] = 1000000007;
        tmp[i][1] = 1000000007;
      }
      multiset<int> dp0, dp1;
      for (auto i = (0); i < (N + 1); i++) {
        dp0.insert(dp[i][0]);
        dp1.insert(dp[i][1]);
        ckmin(tmp[i][0], *dp0.begin() + 2);
        ckmin(tmp[i][1], *dp1.begin() + 2);
        ckmin(tmp[i][1], *dp0.begin() + 1);
        ckmin(tmp[i][0], *dp1.begin() + 1);
        if (i >= sz) {
          dp0.erase(dp0.find(dp[i - sz][0]));
          dp1.erase(dp1.find(dp[i - sz][1]));
        }
      }
      for (auto i = (0); i < (N + 1); i++) {
        ckmin(tmp[i][1], dp[i][1]);
      }
      for (auto i = (0); i < (N + 1 - sz); i++) {
        ckmin(tmp[i + sz][0], dp[i][0]);
      }
      for (auto i = (0); i < (N + 1); i++) {
        dp[i][0] = tmp[i][0];
        dp[i][1] = tmp[i][1];
      }
    }
  }
  ans = min(dp[N][0], dp[N][1]);
  if (ans >= 1000000007) {
    cout << "Hungry\n";
    return 0;
  }
  cout << "Full\n" << ans << '\n';
  return 0;
}
