#include <bits/stdc++.h>
using namespace std;
struct Node {
  long long pp, nn, pn, np;
  Node() : pp(0), nn(0), pn(0), np(0) {}
};
struct SegTree {
  long long N;
  vector<Node> sg;
  void init(long long n) {
    N = n;
    sg.resize(4 * N + 10);
  }
  void merge(long long node, Node &a, Node &b) {
    sg[node].pp = max(a.pn + b.pp, a.pp + b.np);
    sg[node].nn = max(a.nn + b.pn, a.np + b.nn);
    sg[node].np = max(a.nn + b.pp, a.np + b.np);
    sg[node].pn = max(a.pp + b.nn, a.pn + b.pn);
  }
  long long query() {
    Node a = sg[1];
    return max({a.pp, a.nn, a.pn, a.np});
  }
  void modify(long long node, long long L, long long R, long long pos,
              long long value) {
    if (L == R) {
      sg[node].pp = value;
      sg[node].np = sg[node].pn = 0;
      sg[node].nn = -value;
      return;
    }
    long long M = (L + R) / 2;
    if (pos <= M) {
      modify(2 * node, L, M, pos, value);
    } else {
      modify(2 * node + 1, M + 1, R, pos, value);
    }
    merge(node, sg[2 * node], sg[2 * node + 1]);
  }
};
void solve() {
  long long n, q;
  cin >> n >> q;
  vector<long long> v(n + 1);
  for (long long i = 1; i <= n; i++) {
    cin >> v[i];
  }
  SegTree sg;
  sg.init(n);
  for (long long i = 1; i <= n; i++) {
    sg.modify(1, 1, n, i, v[i]);
  }
  cout << sg.query() << "\n";
  for (long long tt = 1; tt <= q; tt++) {
    long long l, r;
    cin >> l >> r;
    sg.modify(1, 1, n, l, v[r]);
    sg.modify(1, 1, n, r, v[l]);
    swap(v[l], v[r]);
    cout << sg.query() << "\n";
  }
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long t;
  cin >> t;
  while (t--) {
    solve();
  }
}
