// i must be the reason why
// you have given up your smiles
// and the hope inside your life has been stolen
// i must be the reason why
// you have told me all these lies
// that i will lead a happier life without you by my side
// дальше текст забыл

// t.me/truebaza <---- лучший тг канал
// t.me/truebaza <---- лучший тг канал
// t.me/truebaza <---- лучший тг канал
// t.me/truebaza <---- лучший тг канал
// t.me/truebaza <---- лучший тг канал
// t.me/truebaza <---- лучший тг канал
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef tree<int, null_type, less<>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
#define int long long
#define fastio cin.tie(0), ios_base::sync_with_stdio(false)
#define all(x) (x).begin(), (x).end()
#define INF ((1ll << 60) - 1)

void solve() {
    int n, m;
    cin >> n >> m;
    vector<int> v(m);
    for (auto& i : v) cin >> i;
    vector<int> dpe(n + 1, -INF);
    dpe[0] = 0;
    for (auto i : v) {
        vector<int> ndp(n + 1, -INF);
        for (int j = 0; j < ndp.size(); ++j) {
            if (j > 0) ndp[j - 1] = max(ndp[j - 1], dpe[j] - i);
            if (j + 1 < ndp.size()) ndp[j + 1] = max(ndp[j + 1], dpe[j] + i);
        }
        swap(dpe, ndp);
    }
    cout << *max_element(all(dpe)) << '\n';
}

auto main() -> signed { // t.me/truebaza <---- лучший тг канал
    fastio;
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
}//2