#include <bits/stdc++.h>
using namespace std;
const int maxn = 300012;
int a[maxn];
int feng(int x) {
  if (a[x] > a[x - 1] && a[x] > a[x + 1]) return a[x];
  return 0;
}
int gu(int x) {
  if (a[x] < a[x - 1] && a[x] < a[x + 1]) return a[x];
  return 0;
}
int main() {
  int t, n, i, j, q;
  int l, r;
  cin >> t;
  while (t--) {
    long long ans = 0, ans1 = 0;
    cin >> n >> q;
    for (i = 1; i <= n; i++) scanf("%d", &a[i]);
    a[n + 1] = 0;
    for (j = 1; j <= n; j++) ans += feng(j);
    for (j = 1; j <= n; j++) ans -= gu(j);
    for (i = 1; i <= q + 1; i++) {
      printf("%lld\n", ans);
      if (i <= q) {
        scanf("%d%d", &l, &r);
        if (l > 1) {
          ans -= feng(l - 1);
          ans += gu(l - 1);
        }
        if (r > 1) {
          ans -= feng(r - 1);
          ans += gu(r - 1);
        }
        if (l < n && r - l != 2) {
          ans -= feng(l + 1);
          ans += gu(l + 1);
        }
        if (r < n) {
          ans -= feng(r + 1);
          ans += gu(r + 1);
        }
        if (r - l > 1) {
          ans -= feng(l);
          ans -= feng(r);
          ans += gu(l);
          ans += gu(r);
        }
        swap(a[l], a[r]);
        if (l > 1) {
          ans += feng(l - 1);
          ans -= gu(l - 1);
        }
        if (r > 1) {
          ans += feng(r - 1);
          ans -= gu(r - 1);
        }
        if (l < n && r - l != 2) {
          ans += feng(l + 1);
          ans -= gu(l + 1);
        }
        if (r < n) {
          ans += feng(r + 1);
          ans -= gu(r + 1);
        }
        if (r - l > 1) {
          ans += feng(l);
          ans += feng(r);
          ans -= gu(l);
          ans -= gu(r);
        }
      }
    }
  }
}
