#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;
}