#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
//2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
// Created by polcomicepute
int main(){
int N=0, M=0;
int A[10000], B[10000], num[200];
vector<int> res;
cin >> N >> M;
for(int i=0; i<M; i++){
cin >> A[i] >> B[i];
}
for (int i=0 ;i<N;i++){
num[i]=i+1;
}
// for(int i=0; i<M; i++){
// cout << A[i] <<" " << B[i] <<endl;
// }
//* (N개 중 3개의 맛 선택 조합 수==pos) - (불가능 맛 조합 수==imp)
int pos = (N*(N-1)*(N-2))/(3*2*1);
int imp = 0;
//* 불가능 맛 조합
for(int i=0; i<M;i++){
for (int j=0;j<N;j++){
if (num[j]==A[i] || num[j]==B[i]) //입력받은 2개의 맛 + 하나 더 -> 불가능한 3개의 맛 조합
continue;
else{
vector<int> v = {A[i],B[i],num[j]};
sort(v.begin(),v.end()); //! 조합 개념 : 순서 무관 -> sort한 후, 동일하면 out (이것은 효율적인가?)
int no = 1;
for(int k=0; k<imp;k++){
if(res[k]==v[0]*100+v[1]*10+v[2])
no=0;
}
if (no) {
res.push_back(v[0]*100+v[1]*10+v[2]);
imp++;
}
// for(int k=0; k<3;k++)
// cout << v[k];
// cout << " " << endl;
}
}
}
// for(int i=0; i<imp; i++){
// cout << res[i] <<endl;
// }
cout << pos - imp << endl;
return 0;
}