#include <stdio.h>
main()
{
//int NUM1=5;//城市数
//int NUM2=5;//路数
int NUM1;
int NUM2;
scanf("%d",&NUM1);
scanf("%d",&NUM2);
int i;
int j;
int a[NUM2];
int b[NUM2];
/*
a[0]=1,b[0]=2;
a[1]=2,b[1]=3;
a[2]=3,b[2]=4;
a[3]=4,b[3]=2;
a[4]=3,b[4]=5; */
for(i=0;i<NUM2;i++)
{
scanf("%d",&a[i]);
scanf("%d",&b[i]);
}
int find(int sta,int end)
{
int i;
int la=0;
int qu=0;
for(i=0;i<NUM2;i++)
{
if((a[i]==sta)&&(b[i]==end))
{
la=1;
}
if((a[i]==end)&&(b[i]==sta))
{
qu=1;
}
if((la==1)&&(qu==1))
{
return 1;
}
}
//从sta到end
if(la==0)
{
int color[NUM1+1];
int zhan[NUM1];
int h=0;
for(i=1;i<NUM1+1;i++)
{
color[i]=0;
}
for(i=0;i<NUM1;i++)
{
zhan[i]=0;
}
int temp=sta;
int j;
for(j=0;j<NUM2;j++)//图的遍历
{
int hello=0;
for(i=0;i<NUM2;i++)
{
if((a[i]==temp)&&(color[b[i]]==0))
{
hello=1;
color[a[i]]=1;
color[b[i]]=1;
zhan[h]=temp;
h++;
temp=b[i];
if(b[i]==end)
{
la=1;
}
}
}
if(hello==0)
{
zhan[h]=0;
h--;
temp=zhan[h];
}
}
}
if(qu==0)
{
int color[NUM1+1];
int zhan[NUM1];
int h=0;
for(i=1;i<NUM1+1;i++)
{
color[i]=0;
}
for(i=0;i<NUM1;i++)
{
zhan[i]=0;
}
int temp=end;
int j;
for(j=0;j<NUM2;j++)//图的遍历
{
int hello=0;
for(i=0;i<NUM2;i++)
{
if((a[i]==temp)&&(color[b[i]]==0))
{
hello=1;
color[a[i]]=1;
color[b[i]]=1;
zhan[h]=temp;
h++;
temp=b[i];
if(b[i]==sta)
{
qu=1;
}
}
}
if(hello==0)
{
zhan[h]=0;
h--;
temp=zhan[h];
}
}
}
if((la==1)&&(qu==1))
{
return 1;
}else
{
return 0;
}
}
int kaoshi=0;
for(i=1;i<NUM1+1;i++)
{
for(j=i;j<NUM1+1;j++)
{
kaoshi=kaoshi+find(i,j);
//printf("%d %d %d\n",i,j,kaoshi);
}
}
printf("%d\n",kaoshi);
//kaoshi=kaoshi/2;
}