#include <bits/stdc++.h>
using namespace std;
int N, M;
vector<vector<int> > G;
vector<pair<int, int> > E;
void input() {
  scanf("%d %d", &N, &M);
  G.resize(N);
  for (int i = 0; i < M; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    a--;
    b--;
    G[a].push_back(b);
    G[b].push_back(a);
    E.push_back(make_pair(a, b));
  }
}
long long sumStepsCalc() {
  long long res = 0;
  for (int i = 0; i < N; i++) {
    long long q = G[i].size();
    res += (q * (q - 1)) / 2;
  }
  return res;
}
long long countThreeCycles() {
  long long res = 0;
  for (int i = 0; i < M; i++) {
    int u = E[i].first;
    int v = E[i].second;
    if (G[u].size() < G[v].size()) swap(u, v);
    for (int j = 0; j < G[v].size(); j++)
      if (binary_search(G[u].begin(), G[u].end(), G[v][j])) res++;
  }
  return res / 3;
}
void solve() {
  long long CN3 = ((1ll * N) * (1ll * (N - 1)) * (1ll * (N - 2))) / 6;
  long long slog = M * 1ll * (N - 2);
  long long sumSteps = sumStepsCalc();
  long long threeCycles = 0;
  cout << CN3 - (slog - sumSteps + threeCycles) << endl;
}
int main() {
  input();
  if (N <= 2) {
    cout << 0 << endl;
    return 0;
  }
  solve();
  return 0;
}

### Prompt

Construct a Cpp code solution to the problem outlined:

Alice and Bob don't play games anymore. Now they study properties of all sorts of graphs together. Alice invented the following task: she takes a complete undirected graph with n vertices, chooses some m edges and keeps them. Bob gets the <image> remaining edges.

Alice and Bob are fond of "triangles" in graphs, that is, cycles of length 3. That's why they wonder: what total number of triangles is there in the two graphs formed by Alice and Bob's edges, correspondingly?

Input

The first line contains two space-separated integers n and m (1 ≤ n ≤ 106, 0 ≤ m ≤ 106) — the number of vertices in the initial complete graph and the number of edges in Alice's graph, correspondingly. Then m lines follow: the i-th line contains two space-separated integers ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi), — the numbers of the two vertices connected by the i-th edge in Alice's graph. It is guaranteed that Alice's graph contains no multiple edges and self-loops. It is guaranteed that the initial complete graph also contains no multiple edges and self-loops.

Consider the graph vertices to be indexed in some way from 1 to n.

Output

Print a single number — the total number of cycles of length 3 in Alice and Bob's graphs together.

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is advised to use the cin, cout streams or the %I64d specifier.

Examples

Input

5 5
1 2
1 3
2 3
2 4
3 4


Output

3


Input

5 3
1 2
2 3
1 3


Output

4

Note

In the first sample Alice has 2 triangles: (1, 2, 3) and (2, 3, 4). Bob's graph has only 1 triangle : (1, 4, 5). That's why the two graphs in total contain 3 triangles.

In the second sample Alice's graph has only one triangle: (1, 2, 3). Bob's graph has three triangles: (1, 4, 5), (2, 4, 5) and (3, 4, 5). In this case the answer to the problem is 4.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
int N, M;
vector<vector<int> > G;
vector<pair<int, int> > E;
void input() {
  scanf("%d %d", &N, &M);
  G.resize(N);
  for (int i = 0; i < M; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    a--;
    b--;
    G[a].push_back(b);
    G[b].push_back(a);
    E.push_back(make_pair(a, b));
  }
}
long long sumStepsCalc() {
  long long res = 0;
  for (int i = 0; i < N; i++) {
    long long q = G[i].size();
    res += (q * (q - 1)) / 2;
  }
  return res;
}
long long countThreeCycles() {
  long long res = 0;
  for (int i = 0; i < M; i++) {
    int u = E[i].first;
    int v = E[i].second;
    if (G[u].size() < G[v].size()) swap(u, v);
    for (int j = 0; j < G[v].size(); j++)
      if (binary_search(G[u].begin(), G[u].end(), G[v][j])) res++;
  }
  return res / 3;
}
void solve() {
  long long CN3 = ((1ll * N) * (1ll * (N - 1)) * (1ll * (N - 2))) / 6;
  long long slog = M * 1ll * (N - 2);
  long long sumSteps = sumStepsCalc();
  long long threeCycles = 0;
  cout << CN3 - (slog - sumSteps + threeCycles) << endl;
}
int main() {
  input();
  if (N <= 2) {
    cout << 0 << endl;
    return 0;
  }
  solve();
  return 0;
}

```