← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func solve() {
	scanner := bufio.NewScanner(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var tokens []string
	for scanner.Scan() {
		line := scanner.Text()
		if line == "" {
			continue
		}
		tokens = append(tokens, strings.Fields(line)...)
	}

	ptr := 0
	nextInt := func() int {
		val, _ := strconv.Atoi(tokens[ptr])
		ptr++
		return val
	}

	t := nextInt()
	for tc := 0; tc < t; tc++ {
		n := nextInt()
		m := nextInt()
		maxV := n + m

		a := make([]int, n+1)
		start := make([]int, maxV+1)
		freq := make([]int64, maxV+1)

		for i := range start {
			start[i] = -1
		}

		for i := 1; i <= n; i++ {
			val := nextInt()
			a[i] = val
			start[val] = 0
		}

		for ver := 1; ver <= m; ver++ {
			p := nextInt()
			v := nextInt()
			old := a[p]

			duration := ver - start[old]
			freq[old] += int64(duration)
			start[old] = -1

			a[p] = v
			start[v] = ver
		}

		for i := 1; i <= n; i++ {
			val := a[i]
			if start[val] != -1 {
				duration := m - start[val] + 1
				freq[val] += int64(duration)
				start[val] = -1
			}
		}

		var inter int64 = 0
		for v := 1; v <= maxV; v++ {
			f := freq[v]
			if f >= 2 {
				inter += f * (f - 1) / 2
			}
		}

		totalPairs := int64(m+1) * int64(m) / 2
		ans := 2*int64(n)*totalPairs - inter
		fmt.Fprintln(writer, ans)
	}
}

func main() {
	solve()
}
```