#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int dx[] = {-1, 0, 1, 0, -1, -1, 1, 1};
const int dy[] = {0, 1, 0, -1, -1, 1, -1, 1};
const int N = 3e5 + 2;
int v[N], n, q;
void read() {
  cin >> n >> q;
  for (int i = 1; i <= n; i++) cin >> v[i];
  v[0] = 0;
  v[n + 1] = 0;
}
int maxima_con[N], minima_con[N];
long long maxima_sum = 0, minima_sum = 0;
bool is_maxima(int indx) { return v[indx] > max(v[indx - 1], v[indx + 1]); }
bool is_minima(int indx) { return v[indx] < min(v[indx - 1], v[indx + 1]); }
void see(int indx) {
  int &i = indx;
  maxima_sum -= maxima_con[i];
  minima_sum -= minima_con[i];
  maxima_con[i] = 0;
  minima_con[i] = 0;
  if (is_maxima(i)) {
    maxima_con[i] = v[i];
    maxima_sum += maxima_con[i];
  }
  if (is_minima(i)) {
    minima_con[i] = v[i];
    minima_sum += minima_con[i];
  }
}
void solve(int test_case) {
  read();
  for (int i = 1; i <= n; i++) {
    see(i);
  }
  cout << maxima_sum - minima_sum;
  cout << "\n";
  ;
  for (int i = 0; i < q; i++) {
    int l, r;
    cin >> l >> r;
    swap(v[l], v[r]);
    for (int del = -1; del <= 1; del++) {
      int indx = l + del;
      if (indx > 0 && indx <= n) see(indx);
      indx = r + del;
      if (indx > 0 && indx <= n) see(indx);
    }
    cout << maxima_sum - minima_sum;
    cout << "\n";
    ;
  }
}
void clear_data() {
  for (int i = 1; i <= n; i++) maxima_con[i] = 0, minima_con[i] = 0;
  maxima_sum = 0;
  minima_sum = 0;
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  int t = 1;
  cin >> t;
  for (int i = 1; i <= t; i++) {
    solve(i);
    clear_data();
  }
  return 0;
}
