#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int tt;
  cin >> tt;
  while (tt--) {
    int n, q;
    cin >> n >> q;
    vector<int> a(n + 2);
    for (int i = 1; i <= n; i++) {
      cin >> a[i];
    }
    long long ans = 0;
    auto up = [&](int x) { return a[x - 1] < a[x] && a[x] > a[x + 1]; };
    auto down = [&](int x) { return a[x - 1] > a[x] && a[x] < a[x + 1]; };
    vector<int> used(n + 2);
    for (int i = 1; i <= n; i++) {
      if (up(i)) {
        ans += a[i];
        used[i] = 1;
      } else if (down(i)) {
        ans -= a[i];
        used[i] = 2;
      }
    }
    cout << ans << '\n';
    while (q--) {
      int l, r;
      cin >> l >> r;
      if (l == r) {
        cout << ans << '\n';
        continue;
      }
      for (int x : {l, r}) {
        if (x < 1 || x > n) {
          continue;
        }
        if (used[x] == 1) {
          ans -= a[x];
        } else if (used[x] == 2) {
          ans += a[x];
        }
        used[x] = 0;
      }
      swap(a[l], a[r]);
      set<int> v{l - 1, l, l + 1, r - 1, r, r + 1};
      for (int x : v) {
        if (x < 1 || x > n) {
          continue;
        }
        if (used[x] == 1) {
          ans -= a[x];
          used[x] = 0;
        } else if (used[x] == 2) {
          ans += a[x];
          used[x] = 0;
        }
        if (up(x)) {
          ans += a[x];
          used[x] = 1;
        } else if (down(x)) {
          ans -= a[x];
          used[x] = 2;
        } else {
          used[x] = 0;
        }
      }
      cout << ans << '\n';
    }
  }
  return 0;
}
