#include <bits/stdc++.h>
using namespace std;
const long long MX = 3e5 + 5;
const long long INF = 1e12;
struct info {
  long long mm, mp, pp, pm;
};
long long ara[MX];
info tree[4 * MX];
void build(long long node, long long b, long long e) {
  if (b > e) return;
  if (b == e) {
    tree[node].mp = -INF;
    tree[node].pm = -INF;
    tree[node].mm = -ara[b];
    tree[node].pp = ara[b];
    return;
  }
  long long lft = 2 * node, rht = lft + 1, mid = (b + e) / 2;
  build(lft, b, mid);
  build(rht, mid + 1, e);
  tree[node].pp = max({tree[lft].pp + tree[rht].mp, tree[lft].pm + tree[rht].pp,
                       tree[lft].pp, tree[rht].pp});
  tree[node].pm = max({tree[lft].pm + tree[rht].pm, tree[lft].pp + tree[rht].mm,
                       tree[lft].pm, tree[rht].pm});
  tree[node].mp = max({tree[lft].mp + tree[rht].mp, tree[lft].mm + tree[rht].pp,
                       tree[lft].mp, tree[rht].mp});
  tree[node].mm = max({tree[lft].mp + tree[rht].mm, tree[lft].mm + tree[rht].pm,
                       tree[lft].mm, tree[rht].mm});
}
void update(long long node, long long b, long long e, long long indx,
            long long val) {
  if (b > indx || e < indx) return;
  if (b == indx && e == indx) {
    tree[node].mp = -INF;
    tree[node].pm = -INF;
    tree[node].mm = -val;
    tree[node].pp = val;
    return;
  }
  long long lft = 2 * node, rht = lft + 1, mid = (b + e) / 2;
  update(lft, b, mid, indx, val);
  update(rht, mid + 1, e, indx, val);
  tree[node].pp = max({tree[lft].pp + tree[rht].mp, tree[lft].pm + tree[rht].pp,
                       tree[lft].pp, tree[rht].pp});
  tree[node].pm = max({tree[lft].pm + tree[rht].pm, tree[lft].pp + tree[rht].mm,
                       tree[lft].pm, tree[rht].pm});
  tree[node].mp = max({tree[lft].mp + tree[rht].mp, tree[lft].mm + tree[rht].pp,
                       tree[lft].mp, tree[rht].mp});
  tree[node].mm = max({tree[lft].mp + tree[rht].mm, tree[lft].mm + tree[rht].pm,
                       tree[lft].mm, tree[rht].mm});
}
long long query() { return max(tree[1].pp, tree[1].pm); }
int main() {
  long long i, j, k;
  long long t;
  scanf("%lld", &t);
  while (t--) {
    long long n, q;
    scanf("%lld %lld", &n, &q);
    for (i = 0; i < n; ++i) scanf("%lld", &ara[i]);
    build(1, 0, n - 1);
    printf("%lld\n", query());
    while (q--) {
      long long l, r;
      scanf("%lld %lld", &l, &r);
      l--, r--;
      swap(ara[l], ara[r]);
      update(1, 0, n - 1, l, ara[l]);
      update(1, 0, n - 1, r, ara[r]);
      printf("%lld\n", query());
    }
  }
}
