← Home
package main

import (
	"io"
	"os"
	"strconv"
)

func contrib(a []int64, i int) int64 {
	if i <= 0 || i >= len(a) {
		return 0
	}
	if i == 1 {
		return a[1]
	}
	if a[i] > a[i-1] {
		return a[i] - a[i-1]
	}
	return 0
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	p := 0
	nextInt := func() int {
		for p < len(data) && data[p] <= ' ' {
			p++
		}
		x := 0
		for p < len(data) && data[p] > ' ' {
			x = x*10 + int(data[p]-'0')
			p++
		}
		return x
	}

	t := nextInt()
	out := make([]byte, 0, 1<<22)

	for ; t > 0; t-- {
		n := nextInt()
		q := nextInt()

		a := make([]int64, n+1)
		for i := 1; i <= n; i++ {
			a[i] = int64(nextInt())
		}

		var ans int64 = a[1]
		for i := 2; i <= n; i++ {
			if a[i] > a[i-1] {
				ans += a[i] - a[i-1]
			}
		}

		out = strconv.AppendInt(out, ans, 10)

		for ; q > 0; q-- {
			l := nextInt()
			r := nextInt()

			var pos [5]int
			cnt := 0
			add := func(x int) {
				if x < 1 || x > n {
					return
				}
				for i := 0; i < cnt; i++ {
					if pos[i] == x {
						return
					}
				}
				pos[cnt] = x
				cnt++
			}

			add(1)
			add(l)
			add(l + 1)
			add(r)
			add(r + 1)

			for i := 0; i < cnt; i++ {
				ans -= contrib(a, pos[i])
			}

			a[l], a[r] = a[r], a[l]

			for i := 0; i < cnt; i++ {
				ans += contrib(a, pos[i])
			}

			out = append(out, ' ')
			out = strconv.AppendInt(out, ans, 10)
		}

		out = append(out, '\n')
	}

	os.Stdout.Write(out)
}