```go
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func nextInt(data []byte, idx *int) int {
n := len(data)
for *idx < n && (data[*idx] < '0' || data[*idx] > '9') {
*idx++
}
val := 0
for *idx < n && data[*idx] >= '0' && data[*idx] <= '9' {
val = val*10 + int(data[*idx]-'0')
*idx++
}
return val
}
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
n := nextInt(data, &idx)
m := nextInt(data, &idx)
deg := make([]int, n+1)
for i := 0; i < m; i++ {
a := nextInt(data, &idx)
b := nextInt(data, &idx)
deg[a]++
deg[b]++
}
var sumSq int64
for i := 1; i <= n; i++ {
d := int64(deg[i])
sumSq += d * d
}
nn := int64(n)
mm := int64(m)
ans := nn*(nn-1)*(nn-2)/6 - mm*(nn-1) + sumSq/2
out := bufio.NewWriterSize(os.Stdout, 1<<20)
fmt.Fprint(out, ans)
out.Flush()
}
```