#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 101000
int fa[N],tag[N],sum[N],ans,ans1;//tag记录满足条件的集合的编号
int find(int x){//并查集路径压缩find
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void merge(int x,int y){
int fx=find(x);
int fy=find(y);
if(fx!=fy){//并查集合并
fa[fx]=fy;
sum[fy]+=sum[fx];
}
}
int main(){
int n,m,x,y;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){//并查集初始化,加元素个数的数组初始化
fa[i]=i;sum[i]=1;
}
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
merge(x,y);
}
int k=0;
for(int i=1;i<=n;i++){//找有几个集合k为保存集合数的下标,ans为集合数
if(fa[i]==i){
ans++;
tag[++k]=i;
}
}
if(ans<=6){
printf("^_^");return 0;
}
for(int i=1;i<=k;i++)
tag[i]=sum[tag[i]];
sort(tag+1,tag+k+1,greater<int>());
for(int i=1;i<=6;i++)//前6大的集合的元素总数,不满足认识6 人就认识世界的时候输出
ans1+=tag[i];
printf("T_T\n");
printf("%d\n",ans1);
return 0;
}