#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll> par;
ll root(ll u){
if(par[u]==u) return u;
ll rt=root(par[u]);
par[u]=rt;
return rt;
}
void join(ll u,ll v){
ll ru=root(u);
ll rv=root(v);
if(ru==rv) return;
par[ru]=rv;
}
ll ans=0;
bool check;
vector<vector<ll>> e;
vector<bool> vis;
void dfs(ll u,ll j,ll k){
if(check) return;
vis[u]=1;
if(vis[j] and vis[k]) check=1;
for(auto v:e[u]){
if(check) return;
if(vis[v]) continue;
if(v==k and vis[j]==0) continue;
dfs(v,j,k);
}
vis[u]=0;
}
int main(){
ll n,m,i,j,k,q;
cin>>n>>m;
par.resize(n+1);
e.resize(n+1);
vis.resize(n+1);
for(i=1 ; i<=n ; i++) par[i]=i;
for(i=0 ; i<m ; i++){
cin>>j>>k;
join(j,k);
e[j].push_back(k);
e[k].push_back(j);
}
set<ll> st;
for(i=1 ; i<=n ; i++){
for(j=1 ; j<=n ; j++){
if(i==j) continue;
for(k=1 ; k<=n ; k++){
if(k==i or k==j) continue;
if(root(i)!=root(j) or root(j)!=root(k)) continue;
// i->j->K
fill(vis.begin(),vis.end(),0);
check=0;
dfs(i,j,k);
if(check) ans++;
}
}
}
cout<<ans<<"\n";
return 0;
}