← Home
 ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	
	var t int
	fmt.Fscan(reader, &t)
	
	for tc := 0; tc < t; tc++ {
		var n, k int
		fmt.Fscan(reader, &n, &k)
		
		used := make([]bool, 2*n+1)
		type chord struct{ a, b int }
		old := make([]chord, k)
		
		for i := 0; i < k; i++ {
			var x, y int
			fmt.Fscan(reader, &x, &y)
			if x > y {
				x, y = y, x
			}
			old[i] = chord{x, y}
			used[x] = true
			used[y] = true
		}
		
		free := []int{}
		for i := 1; i <= 2*n; i++ {
			if !used[i] {
				free = append(free, i)
			}
		}
		
		m := n - k
		newChords := make([]chord, m)
		for i := 0; i < m; i++ {
			newChords[i] = chord{free[i], free[i+m]}
		}
		
		ans := 0
		
		for i := 0; i < k; i++ {
			for j := i + 1; j < k; j++ {
				a, b := old[i].a, old[i].b
				c, d := old[j].a, old[j].b
				if (a < c && c < b && b < d) || (c < a && a < d && d < b) {
					ans++
				}
			}
		}
		
		ans += m * (m - 1) / 2
		
		for i := 0; i < k; i++ {
			for j := 0; j < m; j++ {
				a, b := old[i].a, old[i].b
				c, d := newChords[j].a, newChords[j].b
				if (a < c && c < b && b < d) || (c < a && a < d && d < b) {
					ans++
				}
			}
		}
		
		fmt.Println(ans)
	}
}
```