#include <bits/stdc++.h>
using namespace std;
void solve() {
  long long n, q;
  cin >> n >> q;
  vector<long long> a(n);
  for (auto &it : a) {
    cin >> it;
  }
  long long ans = 0;
  function<bool(long long)> isPeak = [&](long long idx) {
    if (idx - 1 >= 0 && a[idx] < a[idx - 1]) return 0;
    if (idx + 1 < n && a[idx] < a[idx + 1]) return 0;
    return 1;
  };
  function<bool(long long)> isValley = [&](long long idx) {
    if ((idx + 1 < n && a[idx + 1] > a[idx]) &&
        (idx - 1 >= 0 && a[idx - 1] > a[idx]))
      return 1;
    return 0;
  };
  for (long long i = 0; i < n; i++) {
    ans += a[i] * isPeak(i);
    ans -= a[i] * isValley(i);
  }
  cout << ans << '\n';
  while (q--) {
    long long l, r;
    cin >> l >> r;
    l--, r--;
    ans -= a[l] * isPeak(l);
    ans += a[l] * isValley(l);
    ans -= a[r] * isPeak(r);
    ans += a[r] * isValley(r);
    for (auto p : {l, r}) {
      for (auto dir : {1, -1}) {
        if (p + dir < n && p + dir >= 0 && p + dir != l && p + dir != r) {
          if (isPeak(p + dir))
            ans -= a[p + dir];
          else if (isValley(p + dir))
            ans += a[p + dir];
        }
      }
    }
    swap(a[l], a[r]);
    ans += a[l] * isPeak(l);
    ans -= a[l] * isValley(l);
    ans += a[r] * isPeak(r);
    ans -= a[r] * isValley(r);
    for (auto p : {l, r}) {
      for (auto dir : {1, -1}) {
        if (p + dir < n && p + dir >= 0 && p + dir != l && p + dir != r) {
          if (isPeak(p + dir))
            ans += a[p + dir];
          else if (isValley(p + dir))
            ans -= a[p + dir];
        }
      }
    }
    cout << ans << '\n';
  }
}
signed main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long t;
  cin >> t;
  while (t--) {
    solve();
  }
}
