#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int K = 3e5 + 5;

LL n, k;
LL a[K];

int get_n(LL x) {
    int l = 1, r = n;
    int res = 0;
    while(l<=r) {
        LL mid = l + (r-l)/2;
        if(mid*(mid-1)/2+1<=x) {
            res = mid;
            l = mid + 1;
        } else {
            r = mid - 1;
        }
    } 
    return res;
}

void merge(map<int,int>& mp, int l,int r) {
    auto L = mp.lower_bound(l+1), R = mp.upper_bound(r+1);
    if(L!=mp.begin()) {
        L--;
        if(L->second + 1 >= l) l = L->first;
        else L++;
    }
    int tmp = r + 1;
    while(L!=mp.end() && L->first <= tmp) {
        r = max(r, L->second);
        L = mp.erase(L);
    }
    mp[l] = r;
}

void print(map<int,int>& mp) {
    for(auto [l,r]:mp) cout << "[" << l << ", " << r << "] ";
    cout << "\n";
}

void solve() {
    map<int,map<int,int>,greater<int>> mp;
    cin >> n >> k;
    for (int i = 1; i <= k; i++) {
        cin >> a[i];
        LL r = get_n(a[i]);
        LL c = a[i] - r * (r - 1) / 2;
        merge(mp[r], c, c);
        // print(mp[r]);
    }
    LL ans = 0;
    while(mp.size()) {
        auto& [row, S] = *mp.begin();
        // print(S);
        while(S.size()) {
            auto it = S.begin();
            int l = it->first, r= it->second;
            ans += r - l + 1;
            if(l < r) {
                // cout << "merge:" << l << " " << r - 1 << "\n";
                merge(mp[row-1], l, r-1);
            }
            it = S.erase(it);
        }
        mp.erase(mp.begin());
    }
    cout << ans << "\n";
}

int main() {
    // cin.tie(0)->sync_with_stdio(0);
    int T = 1;
    cin >> T;
    while (T--) solve();
}
// 64 位输出请用 printf("%lld")