#include <bits/stdc++.h>
char _inp[4097], *_pinp = _inp;
char _;
using namespace std;
int N, M;
vector<pair<int, int>> edges;
int stfu[1000001];
int main() {
  do {
    while ((N = (*_pinp ? *_pinp++
                        : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                           *_pinp++))) < '0')
      ;
    for (N -= '0';
         '0' <=
         (_ = (*_pinp ? *_pinp++
                      : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                                                           *_pinp++)));
         N = (N << 3) + (N << 1) + _ - '0')
      ;
  } while (0);
  do {
    while ((M = (*_pinp ? *_pinp++
                        : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                           *_pinp++))) < '0')
      ;
    for (M -= '0';
         '0' <=
         (_ = (*_pinp ? *_pinp++
                      : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                                                           *_pinp++)));
         M = (M << 3) + (M << 1) + _ - '0')
      ;
  } while (0);
  int a, b;
  for (int i = 0; i < M; i++) {
    do {
      while ((a = (*_pinp ? *_pinp++
                          : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                             *_pinp++))) < '0')
        ;
      for (a -= '0';
           '0' <=
           (_ = (*_pinp ? *_pinp++
                        : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                                                             *_pinp++)));
           a = (a << 3) + (a << 1) + _ - '0')
        ;
    } while (0);
    do {
      while ((b = (*_pinp ? *_pinp++
                          : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                             *_pinp++))) < '0')
        ;
      for (b -= '0';
           '0' <=
           (_ = (*_pinp ? *_pinp++
                        : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                                                             *_pinp++)));
           b = (b << 3) + (b << 1) + _ - '0')
        ;
    } while (0);
    stfu[a]++;
    stfu[b]++;
    edges.push_back({a, b});
  }
  long long ans = 1LL * N * (N - 1) * (N - 2) / 6, sum = 0;
  for (auto& it : edges) {
    int u = it.first, v = it.second;
    sum += N * 2 - stfu[u] - stfu[v] - 2;
  }
  printf("%lld\n", ans - sum / 2);
  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>
char _inp[4097], *_pinp = _inp;
char _;
using namespace std;
int N, M;
vector<pair<int, int>> edges;
int stfu[1000001];
int main() {
  do {
    while ((N = (*_pinp ? *_pinp++
                        : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                           *_pinp++))) < '0')
      ;
    for (N -= '0';
         '0' <=
         (_ = (*_pinp ? *_pinp++
                      : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                                                           *_pinp++)));
         N = (N << 3) + (N << 1) + _ - '0')
      ;
  } while (0);
  do {
    while ((M = (*_pinp ? *_pinp++
                        : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                           *_pinp++))) < '0')
      ;
    for (M -= '0';
         '0' <=
         (_ = (*_pinp ? *_pinp++
                      : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                                                           *_pinp++)));
         M = (M << 3) + (M << 1) + _ - '0')
      ;
  } while (0);
  int a, b;
  for (int i = 0; i < M; i++) {
    do {
      while ((a = (*_pinp ? *_pinp++
                          : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                             *_pinp++))) < '0')
        ;
      for (a -= '0';
           '0' <=
           (_ = (*_pinp ? *_pinp++
                        : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                                                             *_pinp++)));
           a = (a << 3) + (a << 1) + _ - '0')
        ;
    } while (0);
    do {
      while ((b = (*_pinp ? *_pinp++
                          : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                             *_pinp++))) < '0')
        ;
      for (b -= '0';
           '0' <=
           (_ = (*_pinp ? *_pinp++
                        : (_inp[fread(_pinp = _inp, 1, 4096, stdin)] = '\0',
                                                             *_pinp++)));
           b = (b << 3) + (b << 1) + _ - '0')
        ;
    } while (0);
    stfu[a]++;
    stfu[b]++;
    edges.push_back({a, b});
  }
  long long ans = 1LL * N * (N - 1) * (N - 2) / 6, sum = 0;
  for (auto& it : edges) {
    int u = it.first, v = it.second;
    sum += N * 2 - stfu[u] - stfu[v] - 2;
  }
  printf("%lld\n", ans - sum / 2);
  return 0;
}

```