#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;inline int gi(){ char tmp=getchar();int ans=0; while(!isdigit(tmp)) tmp=getchar(); while(isdigit(tmp)) { ans = ans * 10 + tmp - '0'; tmp = getchar(); } return ans;}const int N = 1e7;const int BIG = 1e7;int F[BIG],G[BIG];int n;int A[N],B[N],Q[N];signed main(){#ifdef HJWWWW freopen("data.in","r",stdin);#endif n=gi();int m = gi(); for(int i=1;i<=m;++i) A[i]=gi(),B[i]=gi(); memset(F,127,sizeof F); F[0] = 0; for(int i=1;i<=m;++i){ int len = max(A[i] - B[i-1] - 1,0); for(int j=n;j>=len;--j) F[j] = F[j-len]; for(int j=0;j<=len-1;++j) F[j] = 1e9; len = B[i] - A[i] + 1; memset(G,127,sizeof G); // G[0] = 0; for(int j=n;j>=len;--j) G[j] = F[j-len]; int w = 0; int head = 0, tail = -1; for(int j=n;j>=0;--j){ // B[i] - B[i] + A[i] - 1 // pos - j + d - 1 // A[i] - 1 - j + B[i] - A[i] // B[i] - j - 1 while(w <= B[i] - j - 1){ while(head <= tail && F[w] < F[Q[tail]]) --tail; Q[++tail] = w++; } while(head <= tail && Q[head] < B[i] - len - j) head++; // ? if(head<=tail) G[j] = min(G[j],1+F[Q[head]]); } w=0,head=0,tail=-1; for(int j=0;j<=n;++j){ while(w <= j-1){ while(head <= tail && F[Q[tail]] > F[w]) tail--; Q[++tail] = w++; } while(head <= tail && Q[head] < j - len + 1) head++; if(head <= tail) G[j] = min(G[j],2+F[Q[head]]); } memcpy(F,G,sizeof G); } int len = (n<<1) - B[m]; for(int j=n;j>=len;--j) F[j] = F[j-len]; for(int j=0;j<len;++j) F[j] =1e9; if(F[n] >= 1e5) return puts("Hungry"),0; else return printf("Full\n%d\n",F[n]),0; return 0;}