#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-11;
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
int mp[101][101], in[101], out[101], m, n;
bool vis[101];
bool sch(int k) {
  vis[k] = 1;
  for (int j = 0; j < n; j++)
    if (mp[k][j] && !vis[j]) {
      in[k]--;
      in[j]--;
      if (in[j] == 1)
        return sch(j);
      else if (in[j] == 0)
        return false;
      else
        return true;
    }
}
void sch2(int k) {
  vis[k] = 1;
  for (int i = 0; i < n; i++)
    if (mp[k][i] && !vis[i]) sch2(i);
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--, v--;
    mp[u][v] = 1;
    in[u]++;
    swap(u, v);
    mp[u][v] = 1;
    in[u]++;
  }
  for (int i = 0; i < n; i++) {
    if (in[i] == 0) {
      printf("NO\n");
      return 0;
    }
  }
  for (int i = 0; i < n; i++) {
    if (in[i] == 1) {
      if (!sch(i)) {
        printf("NO\n");
        return 0;
      }
    }
  }
  int tmp = 0;
  for (int i = 0; i < n; i++) {
    if (!vis[i] && in[i] != 2) {
      printf("NO\n");
      return 0;
    }
    if (in[i] == 2) tmp++;
  }
  if (tmp < 3) {
    printf("NO\n");
    return 0;
  }
  for (int i = 0; i < n; i++) {
    if (!vis[i]) {
      sch2(i);
      break;
    }
  }
  for (int i = 0; i < n; i++) {
    if (!vis[i]) {
      printf("NO\n");
      return 0;
    }
  }
  printf("FHTAGN!\n");
  return 0;
}
