#include <bits/stdc++.h>
using namespace std;
void swapp(long long* a, long long* b) {
  long long temp = *a;
  *a = *b;
  *b = temp;
  return;
}
long long max(long long a, long long b) { return (a > b) ? a : b; }
long long min(long long a, long long b) { return (a < b) ? a : b; }
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t;
  cin >> t;
  while (t--) {
    long long n, q;
    cin >> n >> q;
    long long a[n];
    for (long long i = 0; i < n; i++) cin >> a[i];
    long long ans = 0;
    unordered_set<long long> maxx, minx;
    if (n != 1) {
      for (long long i = 0; i < n; i++) {
        if (i == 0) {
          if (a[i] > a[i + 1]) {
            ans += a[i];
            maxx.insert(i);
          }
        } else if (i == n - 1) {
          if (a[i] > a[i - 1]) {
            ans += a[i];
            maxx.insert(i);
          }
        } else {
          if (a[i] > a[i - 1] and a[i] > a[i + 1]) {
            ans += a[i];
            maxx.insert(i);
          }
          if (a[i] < a[i - 1] and a[i] < a[i + 1]) {
            ans -= a[i];
            minx.insert(i);
          }
        }
      }
    } else {
      ans = a[0];
    }
    cout << ans << endl;
    while (q--) {
      long long l, r;
      cin >> l >> r;
      l--;
      r--;
      if (l == r)
        cout << ans << endl;
      else {
        bool flag1 = 0, flag2 = 0;
        for (long long i = max(l - 1, 0); i <= min(l + 1, n - 1); i++) {
          if (maxx.find(i) != maxx.end()) {
            maxx.erase(i);
            ans -= a[i];
            flag1 = 1;
          } else if (minx.find(i) != minx.end()) {
            minx.erase(i);
            ans += a[i];
            flag1 = 1;
          }
        }
        for (long long i = max(r - 1, 0); i <= min(r + 1, n - 1); i++) {
          if (maxx.find(i) != maxx.end()) {
            maxx.erase(i);
            ans -= a[i];
            flag2 = 1;
          } else if (minx.find(i) != minx.end()) {
            minx.erase(i);
            ans += a[i];
            flag2 = 1;
          }
        }
        swapp(&a[l], &a[r]);
        if (1) {
          for (long long i = max(l - 1, 0); i <= min(l + 1, n - 1); i++) {
            if (minx.find(i) == minx.end() and maxx.find(i) == maxx.end()) {
              if (i == 0) {
                if (a[i] > a[i + 1]) {
                  ans += a[i];
                  maxx.insert(i);
                }
              } else if (i == n - 1) {
                if (a[i] > a[i - 1]) {
                  ans += a[i];
                  maxx.insert(i);
                }
              } else {
                if (a[i] > a[i - 1] and a[i] > a[i + 1]) {
                  ans += a[i];
                  maxx.insert(i);
                }
                if (a[i] < a[i - 1] and a[i] < a[i + 1]) {
                  ans -= a[i];
                  minx.insert(i);
                }
              }
            }
          }
        }
        if (1) {
          for (long long i = max(r - 1, 0); i <= min(r + 1, n - 1); i++) {
            if (minx.find(i) == minx.end() and maxx.find(i) == maxx.end()) {
              if (i == 0) {
                if (a[i] > a[i + 1]) {
                  ans += a[i];
                  maxx.insert(i);
                }
              } else if (i == n - 1) {
                if (a[i] > a[i - 1]) {
                  ans += a[i];
                  maxx.insert(i);
                }
              } else {
                if (a[i] > a[i - 1] and a[i] > a[i + 1]) {
                  ans += a[i];
                  maxx.insert(i);
                }
                if (a[i] < a[i - 1] and a[i] < a[i + 1]) {
                  ans -= a[i];
                  minx.insert(i);
                }
              }
            }
          }
        }
        cout << ans << endl;
      }
    }
  }
}
