← Home
```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()
}
```