#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
inline long long getint() {
  long long _x = 0, _tmp = 1;
  char _tc = getchar();
  while ((_tc < '0' || _tc > '9') && _tc != '-') _tc = getchar();
  if (_tc == '-') _tc = getchar(), _tmp = -1;
  while (_tc >= '0' && _tc <= '9') _x *= 10, _x += (_tc - '0'), _tc = getchar();
  return _x * _tmp;
}
inline long long add(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x += _y;
  return _x >= _mod ? _x - _mod : _x;
}
inline long long sub(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x -= _y;
  return _x < 0 ? _x + _mod : _x;
}
inline long long mul(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x *= _y;
  return _x >= _mod ? _x % _mod : _x;
}
long long mypow(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 1LL;
  long long _ret = mypow(mul(_a, _a, _mod), _x >> 1, _mod);
  if (_x & 1) _ret = mul(_ret, _a, _mod);
  return _ret;
}
long long mymul(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 0LL;
  long long _ret = mymul(add(_a, _a, _mod), _x >> 1, _mod);
  if (_x & 1) _ret = add(_ret, _a, _mod);
  return _ret;
}
inline bool equal(double _x, double _y) {
  return _x > _y - 1e-9 && _x < _y + 1e-9;
}
void sleep(double sec = 1021) {
  clock_t s = clock();
  while (clock() - s < CLOCKS_PER_SEC * sec)
    ;
}
int __ = 1, _cs;
const int inf = 1e9;
void build() {}
int n, k;
void init() {
  n = getint();
  k = getint();
}
int dp[101010][2], lst;
int pdp[101010][2];
int dq[101010], df, dt;
void solve() {
  for (int i = 0; i <= n; i++) dp[i][0] = dp[i][1] = inf;
  dp[0][0] = 0;
  while (k--) {
    int li = getint();
    int ri = getint();
    for (int i = 0; i <= n; i++)
      for (int j = 0; j < 2; j++) {
        pdp[i][j] = dp[i][j];
        dp[i][j] = inf;
      }
    for (int i = 0; i <= n; i++) {
      if (i + li - lst <= n) dp[i + li - lst][0] = pdp[i][0];
      dp[i][1] = pdp[i][1];
    }
    for (int i = 0; i <= n; i++)
      for (int j = 0; j < 2; j++) {
        pdp[i][j] = dp[i][j];
        dp[i][j] = inf;
      }
    int dlt = ri - li;
    for (int i = 0; i <= n; i++) {
      if (i + dlt <= n) dp[i + dlt][0] = pdp[i][0];
      dp[i][1] = pdp[i][1];
    }
    for (int j = 0; j < 2; j++) {
      df = dt = 0;
      for (int i = 0; i <= n; i++) {
        while (df != dt and pdp[dq[dt - 1]][j] >= pdp[i][j]) dt--;
        while (df != dt and dq[df] < i - dlt) df++;
        dq[dt++] = i;
        dp[i][j] = min(dp[i][j], pdp[dq[df]][j] + 2);
        dp[i][1 - j] = min(dp[i][1 - j], pdp[dq[df]][j] + 1);
      }
    }
    lst = ri;
  }
  int ans = dp[n][1];
  if (n + n - lst <= n) ans = min(ans, dp[n - (n + n - lst)][0]);
  if (ans >= inf)
    puts("Hungry");
  else {
    puts("Full");
    cout << ans << endl;
  }
}
int main() {
  build();
  while (__--) {
    init();
    solve();
  }
}
