#include <bits/stdc++.h>
using namespace std;
bool DEB = false;
void MP() {
  ios::sync_with_stdio(false);
  cin.tie(0);
}
#pragma comment(linker, "/STACK:256000000")
const long long inf = (long long)1e13 + 9;
const int MAX = (int)3e5 + 10;
int a[MAX];
long long t[4 * MAX][2][2];
inline void f(int v, int a, int b) {
  t[v][0][0] = min({t[a][0][0], t[b][0][0], t[a][0][1] + t[b][0][0],
                    t[a][0][0] - t[b][1][1]});
  t[v][0][1] = min({t[a][0][1], t[b][0][1], t[a][0][1] + t[b][0][1],
                    t[a][0][0] - t[b][1][0]});
  t[v][1][0] = max({t[a][1][0], t[b][1][0], t[a][1][1] + t[b][1][0],
                    t[a][1][0] - t[b][0][1]});
  t[v][1][1] = max({t[a][1][1], t[b][1][1], t[a][1][1] + t[b][1][1],
                    t[a][1][0] - t[b][0][0]});
}
inline void build(int v, int lv, int rv) {
  if (lv + 1 == rv) {
    t[v][0][0] = a[lv];
    t[v][0][1] = inf;
    t[v][1][0] = a[lv];
    t[v][1][1] = -inf;
    return;
  }
  int m = lv + rv >> 1;
  build(v << 1, lv, m);
  build((v << 1) + 1, m, rv);
  f(v, v << 1, (v << 1) + 1);
}
inline void update(int v, int lv, int rv, int id, int val) {
  if (lv + 1 == rv) {
    t[v][0][0] = val;
    t[v][0][1] = inf;
    t[v][1][0] = val;
    t[v][1][1] = -inf;
    return;
  }
  int m = lv + rv >> 1;
  if (id < m)
    update(v << 1, lv, m, id, val);
  else
    update((v << 1) + 1, m, rv, id, val);
  f(v, v << 1, (v << 1) + 1);
}
void solve() {
  int n, q;
  cin >> n >> q;
  for (int i = 0; i < (n); ++i) cin >> a[i];
  build(1, 0, n);
  cout << (max(t[1][1][0], t[1][1][1])) << '\n';
  while (q--) {
    int l, r;
    cin >> l >> r;
    --l, --r;
    swap(a[l], a[r]);
    update(1, 0, n, l, a[l]);
    update(1, 0, n, r, a[r]);
    cout << (max(t[1][1][0], t[1][1][1])) << '\n';
  }
}
signed main() {
  MP();
  int T;
  for (cin >> T; T--;) {
    solve();
  }
  return 0;
}
