#include <bits/stdc++.h>
using namespace std;
ll C3(ll a) {
if (a < 3) return 0;
return a * (a-1) * (a-2) / 6;
}
vector<int> adj[maxn];
int deg[maxn];
map<int, int> cnt[maxn];
int n,m;
int vis[maxn];
bool valid(int u, int v) {
return deg[u] < deg[v] || (deg[u] == deg[v] && u < v);
}
vector<int> adj2[maxn];
void count_cycle() {
for (int a = 1; a <= n; a++) {
for (int b : adj[a]) {
if (valid(a,b)) adj2[a].push_back(b);
}
}
for (int a = 1; a <= n; a++) {
for (int b : adj2[a]) vis[b] = a;
for (int b : adj2[a]) {
for (int c : adj2[b]) {
if (vis[c] == a) {
cnt[min(a,b)][max(a,b)]++;
cnt[min(a,c)][max(a,c)]++;
cnt[min(b,c)][max(b,c)]++;
}
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
deg[u]++, deg[v]++;
}
count_cycle();
ll ans = 0;
for (int d = 1; d <= n; d++) {
if (deg[d] < 4) continue;
for (int b : adj[d]) {
if (deg[b] < 2) continue;
int x = cnt[min(d,b)][max(d,b)];
ans = ans + C3(deg[d]-2) * x + max(0, deg[b] - 1 - x) * C3(deg[d]-1);
}
}
cout << ans << endl;
}