#include <iostream>
#include <vector>
using namespace std;
const int MOD = 998244353;
const int MAX = 500005;
long long fact[MAX];
long long p2[MAX];
long long inv[MAX];
void precompute() {
fact[0] = 1;
p2[0] = 1;
for (int i = 1; i < MAX; ++i) {
fact[i] = fact[i - 1] * i % MOD;
p2[i] = p2[i - 1] * 2 % MOD;
}
inv[1] = 1;
for (int i = 2; i < MAX; ++i) {
inv[i] = (MOD - 1LL * (MOD / i) * inv[MOD % i] % MOD) % MOD;
}
}
void solve() {
int N, K;
cin >> N >> K;
vector<int> A(K);
vector<bool> in_A(N + 1, false);
int max_A = 0;
for (int i = 0; i < K; ++i) {
cin >> A[i];
in_A[A[i]] = true;
if (A[i] > max_A) {
max_A = A[i];
}
}
long long ways = fact[N - K];
vector<long long> C(N + 1, 0);
int running_max = 0;
for (int i = 0; i < K; ++i) {
int x = A[i];
if (running_max > x) {
C[x] = 0;
} else {
C[x] = ways;
}
if (x > running_max) {
running_max = x;
}
}
for (int x = 1; x <= N; ++x) {
if (!in_A[x]) {
if (x < max_A) {
C[x] = 0;
} else {
C[x] = ways * inv[N - x + 1] % MOD;
}
}
}
long long ans = 0;
for (int x = 1; x <= N; ++x) {
long long bad_ways = (ways - C[x] + MOD) % MOD;
long long term = p2[x - 1] * bad_ways % MOD;
ans = (ans + term) % MOD;
}
cout << ans << "\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
precompute();
int T;
if (cin >> T) {
while (T--) {
solve();
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNT0QgPSA5OTgyNDQzNTM7CmNvbnN0IGludCBNQVggPSA1MDAwMDU7Cgpsb25nIGxvbmcgZmFjdFtNQVhdOwpsb25nIGxvbmcgcDJbTUFYXTsKbG9uZyBsb25nIGludltNQVhdOwoKdm9pZCBwcmVjb21wdXRlKCkgewogICAgZmFjdFswXSA9IDE7CiAgICBwMlswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IE1BWDsgKytpKSB7CiAgICAgICAgZmFjdFtpXSA9IGZhY3RbaSAtIDFdICogaSAlIE1PRDsKICAgICAgICBwMltpXSA9IHAyW2kgLSAxXSAqIDIgJSBNT0Q7CiAgICB9CiAgICBpbnZbMV0gPSAxOwogICAgZm9yIChpbnQgaSA9IDI7IGkgPCBNQVg7ICsraSkgewogICAgICAgIGludltpXSA9IChNT0QgLSAxTEwgKiAoTU9EIC8gaSkgKiBpbnZbTU9EICUgaV0gJSBNT0QpICUgTU9EOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IE4sIEs7CiAgICBjaW4gPj4gTiA+PiBLOwogICAgdmVjdG9yPGludD4gQShLKTsKICAgIHZlY3Rvcjxib29sPiBpbl9BKE4gKyAxLCBmYWxzZSk7CiAgICBpbnQgbWF4X0EgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBLOyArK2kpIHsKICAgICAgICBjaW4gPj4gQVtpXTsKICAgICAgICBpbl9BW0FbaV1dID0gdHJ1ZTsKICAgICAgICBpZiAoQVtpXSA+IG1heF9BKSB7CiAgICAgICAgICAgIG1heF9BID0gQVtpXTsKICAgICAgICB9CiAgICB9CgogICAgbG9uZyBsb25nIHdheXMgPSBmYWN0W04gLSBLXTsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IEMoTiArIDEsIDApOwogICAgCiAgICBpbnQgcnVubmluZ19tYXggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBLOyArK2kpIHsKICAgICAgICBpbnQgeCA9IEFbaV07CiAgICAgICAgaWYgKHJ1bm5pbmdfbWF4ID4geCkgewogICAgICAgICAgICBDW3hdID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBDW3hdID0gd2F5czsKICAgICAgICB9CiAgICAgICAgaWYgKHggPiBydW5uaW5nX21heCkgewogICAgICAgICAgICBydW5uaW5nX21heCA9IHg7CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IHggPSAxOyB4IDw9IE47ICsreCkgewogICAgICAgIGlmICghaW5fQVt4XSkgewogICAgICAgICAgICBpZiAoeCA8IG1heF9BKSB7CiAgICAgICAgICAgICAgICBDW3hdID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIENbeF0gPSB3YXlzICogaW52W04gLSB4ICsgMV0gJSBNT0Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbG9uZyBsb25nIGFucyA9IDA7CiAgICBmb3IgKGludCB4ID0gMTsgeCA8PSBOOyArK3gpIHsKICAgICAgICBsb25nIGxvbmcgYmFkX3dheXMgPSAod2F5cyAtIENbeF0gKyBNT0QpICUgTU9EOwogICAgICAgIGxvbmcgbG9uZyB0ZXJtID0gcDJbeCAtIDFdICogYmFkX3dheXMgJSBNT0Q7CiAgICAgICAgYW5zID0gKGFucyArIHRlcm0pICUgTU9EOwogICAgfQoKICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgcHJlY29tcHV0ZSgpOwogICAgaW50IFQ7CiAgICBpZiAoY2luID4+IFQpIHsKICAgICAgICB3aGlsZSAoVC0tKSB7CiAgICAgICAgICAgIHNvbHZlKCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=