#include <bits/stdc++.h>
const int mod = 1e9+7;
long long fp(long long b, int e){
if(e) return fp(b*b%mod, e>>1) * (e&1?b:1) % mod;
return 1;
}
long long solve_brute_force(int n, int x){
long long p = 1, ans{};
// before
for(int y=x; y; --y){
ans = (ans + y * fp(p, mod-2) % mod) % mod;
p = p * 3 % mod;
}
p = 1;
// after
for(int y =x; y <=n; ++y){
ans = (ans + y * fp(p, mod-2) % mod) % mod;
p = p * 3 % mod;
}
ans = ans * fp(3, mod-2) % mod;
return ans;
}
long long arithmetic_geometric_series(long long r, int n){
long long first_term = r * (1 + mod - fp(r, n)) % mod;
first_term = first_term * fp(fp((1+mod-r)%mod, 2), mod-2) % mod;
long long second_term = n * fp(r, n+1) % mod;
second_term = second_term * fp((1+mod-r)%mod, mod-2) % mod;
return (first_term + mod - second_term) % mod;
}
long long geometric_series(long long a, long long r, int n){
return ((a * fp(r, n+1) - a + mod) % mod) * fp(r-1, mod-2) % mod;
}
long long solve_optimized(int n, int x){
long long ans{};
// b
ans = (ans + arithmetic_geometric_series(3, x) * fp(fp(3, x), mod-2) % mod) % mod;
// after
ans = (ans + arithmetic_geometric_series(fp(3, mod-2), n-x)) % mod;
ans = (ans + geometric_series(x, fp(3, mod-2), n-x)) % mod;
ans = ans * fp(3, mod-2) % mod;
return ans;
}
signed main() {
std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr);
int t;
std::cin >> t;
while(t--){
int n, q;
long long ans{};
std::cin >> n >> q;
while(q--){
int x;
std::cin >> x;
ans = (ans + solve_optimized(n, x)) % mod;
}
std::cout << ans << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CmNvbnN0IGludCBtb2QgPSAxZTkrNzsKbG9uZyBsb25nIGZwKGxvbmcgbG9uZyBiLCBpbnQgZSl7CiAgICBpZihlKSByZXR1cm4gZnAoYipiJW1vZCwgZT4+MSkgKiAoZSYxP2I6MSkgJSBtb2Q7CiAgICByZXR1cm4gMTsKfQpsb25nIGxvbmcgc29sdmVfYnJ1dGVfZm9yY2UoaW50IG4sIGludCB4KXsKICAgIGxvbmcgbG9uZyBwID0gMSwgYW5ze307CiAgICAvLyBiZWZvcmUKICAgIGZvcihpbnQgeT14OyB5OyAtLXkpewogICAgICAgIGFucyA9IChhbnMgKyB5ICogZnAocCwgbW9kLTIpICUgbW9kKSAlIG1vZDsKICAgICAgICBwID0gcCAqIDMgJSBtb2Q7CiAgICB9CiAgICBwID0gMTsKICAgIC8vIGFmdGVyCiAgICBmb3IoaW50IHkgPXg7IHkgPD1uOyArK3kpewogICAgICAgIGFucyA9IChhbnMgKyB5ICogZnAocCwgbW9kLTIpICUgbW9kKSAlIG1vZDsKICAgICAgICBwID0gcCAqIDMgJSBtb2Q7CiAgICB9CiAgICBhbnMgPSBhbnMgKiBmcCgzLCBtb2QtMikgJSBtb2Q7CiAgICByZXR1cm4gYW5zOwp9CmxvbmcgbG9uZyBhcml0aG1ldGljX2dlb21ldHJpY19zZXJpZXMobG9uZyBsb25nIHIsIGludCBuKXsKICAgIGxvbmcgbG9uZyBmaXJzdF90ZXJtID0gciAqICgxICsgbW9kIC0gZnAociwgbikpICUgbW9kOwogICAgZmlyc3RfdGVybSA9IGZpcnN0X3Rlcm0gKiBmcChmcCgoMSttb2QtciklbW9kLCAyKSwgbW9kLTIpICUgbW9kOwogICAgbG9uZyBsb25nIHNlY29uZF90ZXJtID0gbiAqIGZwKHIsIG4rMSkgJSBtb2Q7CiAgICBzZWNvbmRfdGVybSA9IHNlY29uZF90ZXJtICogZnAoKDErbW9kLXIpJW1vZCwgbW9kLTIpICUgbW9kOwogICAgcmV0dXJuIChmaXJzdF90ZXJtICsgbW9kIC0gc2Vjb25kX3Rlcm0pICUgbW9kOwp9CmxvbmcgbG9uZyBnZW9tZXRyaWNfc2VyaWVzKGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgciwgaW50IG4pewogICAgcmV0dXJuICgoYSAqIGZwKHIsIG4rMSkgLSBhICsgbW9kKSAlIG1vZCkgKiBmcChyLTEsIG1vZC0yKSAlIG1vZDsKfQpsb25nIGxvbmcgc29sdmVfb3B0aW1pemVkKGludCBuLCBpbnQgeCl7CiAgICBsb25nIGxvbmcgYW5ze307CiAgICAvLyBiCiAgICBhbnMgPSAoYW5zICsgYXJpdGhtZXRpY19nZW9tZXRyaWNfc2VyaWVzKDMsIHgpICogZnAoZnAoMywgeCksIG1vZC0yKSAlIG1vZCkgJSBtb2Q7CiAgICAvLyBhZnRlcgogICAgYW5zID0gKGFucyArIGFyaXRobWV0aWNfZ2VvbWV0cmljX3NlcmllcyhmcCgzLCBtb2QtMiksIG4teCkpICUgbW9kOwogICAgYW5zID0gKGFucyArIGdlb21ldHJpY19zZXJpZXMoeCwgZnAoMywgbW9kLTIpLCBuLXgpKSAlIG1vZDsKICAgIGFucyA9IGFucyAqIGZwKDMsIG1vZC0yKSAlIG1vZDsKICAgIHJldHVybiBhbnM7Cn0Kc2lnbmVkIG1haW4oKSB7CiAgICBzdGQ6Omlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBzdGQ6OmNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgdDsKICAgIHN0ZDo6Y2luID4+IHQ7CiAgICB3aGlsZSh0LS0pewogICAgICAgIGludCBuLCBxOwogICAgICAgIGxvbmcgbG9uZyBhbnN7fTsKICAgICAgICBzdGQ6OmNpbiA+PiBuID4+IHE7CiAgICAgICAgd2hpbGUocS0tKXsKICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgIHN0ZDo6Y2luID4+IHg7CiAgICAgICAgICAgIGFucyA9IChhbnMgKyBzb2x2ZV9vcHRpbWl6ZWQobiwgeCkpICUgbW9kOwogICAgICAgIH0KICAgICAgICBzdGQ6OmNvdXQgPDwgYW5zIDw8ICdcbic7CiAgICB9Cn0=