#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<long long, null_type,less<>, rb_tree_tag,tree_order_statistics_node_update>
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using vll = vector<ll>;
using pll = pair<ll, ll>;
using mll = map<ll,ll>;
using sll = set<ll>;
#define iv(v) for(auto &i:v) cin >> i
#define ov(v) for(auto &i:v) cout << i << " "
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define Bismillah ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
const ll MOD = 1e9 + 7;
ll add(ll a, ll b, ll mod=MOD) {return ((a % mod) + (b % mod)) % mod;}
ll mul(ll a, ll b, ll mod=MOD) {return ((a % mod) * (b % mod)) % mod;}
ll sub(ll a, ll b) {return (((a - b) % MOD) + MOD) % MOD;}
ll modExp(ll a, ll b) {
if (b <= 0) return 1;
ll ret = modExp(a * a % MOD, b / 2);
if (b % 2) ret = ret * a % MOD;
return ret;
}
ll inverse(ll b) {return modExp(b, MOD - 2);}
ll divv(ll a, ll b) {return ((a % MOD) * (inverse(b) % MOD)) % MOD;}
#define ull ll
void solve(ll t) {
ll k,m;
cin >> k >> m;
vll v(m);
iv(v);
ll x=1;
ll ans=0;
for (ll i=m-1; i>=0; i--) {
if(v[i]==0) ans=add(ans,x);
x=mul(x,k);
}
cout << ans << endl;
}
int main() {
ll t=1;
cin >> t;
for (int i=1; i<=t; i++) {
solve(i);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwojZGVmaW5lIG9yZGVyZWRfc2V0IHRyZWU8bG9uZyBsb25nLCBudWxsX3R5cGUsbGVzczw+LCByYl90cmVlX3RhZyx0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgdWxsID0gdW5zaWduZWQgbG9uZyBsb25nOwp1c2luZyBsZCA9IGxvbmcgZG91YmxlOwp1c2luZyB2bGwgPSB2ZWN0b3I8bGw+Owp1c2luZyBwbGwgPSBwYWlyPGxsLCBsbD47CnVzaW5nIG1sbCA9IG1hcDxsbCxsbD47CnVzaW5nIHNsbCA9IHNldDxsbD47CiNkZWZpbmUgaXYodikgZm9yKGF1dG8gJmk6dikgY2luID4+IGkKI2RlZmluZSBvdih2KSBmb3IoYXV0byAmaTp2KSBjb3V0IDw8IGkgPDwgIiAiCiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSwgdi5lbmQoKQojZGVmaW5lIHJhbGwodikgdi5yYmVnaW4oKSwgdi5yZW5kKCkKI2RlZmluZSB5ZXMgY291dCA8PCAiWUVTXG4iCiNkZWZpbmUgbm8gY291dCA8PCAiTk9cbiIKCiNkZWZpbmUgQmlzbWlsbGFoIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpLCBjb3V0LnRpZShudWxscHRyKTsKCmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CgpsbCBhZGQobGwgYSwgbGwgYiwgbGwgbW9kPU1PRCkge3JldHVybiAoKGEgJSBtb2QpICsgKGIgJSBtb2QpKSAlIG1vZDt9CmxsIG11bChsbCBhLCBsbCBiLCBsbCBtb2Q9TU9EKSB7cmV0dXJuICgoYSAlIG1vZCkgKiAoYiAlIG1vZCkpICUgbW9kO30KbGwgc3ViKGxsIGEsIGxsIGIpIHtyZXR1cm4gKCgoYSAtIGIpICUgTU9EKSArIE1PRCkgJSBNT0Q7fQpsbCBtb2RFeHAobGwgYSwgbGwgYikgewogICAgaWYgKGIgPD0gMCkgcmV0dXJuIDE7CiAgICBsbCByZXQgPSBtb2RFeHAoYSAqIGEgJSBNT0QsIGIgLyAyKTsKICAgIGlmIChiICUgMikgcmV0ID0gcmV0ICogYSAlIE1PRDsKICAgIHJldHVybiByZXQ7Cn0KbGwgaW52ZXJzZShsbCBiKSB7cmV0dXJuIG1vZEV4cChiLCBNT0QgLSAyKTt9CmxsIGRpdnYobGwgYSwgbGwgYikge3JldHVybiAoKGEgJSBNT0QpICogKGludmVyc2UoYikgJSBNT0QpKSAlIE1PRDt9CgoKI2RlZmluZSB1bGwgbGwKdm9pZCBzb2x2ZShsbCB0KSB7CiAgICBsbCBrLG07CiAgICBjaW4gPj4gayA+PiBtOwogICAgdmxsIHYobSk7CiAgICBpdih2KTsKICAgIGxsIHg9MTsKICAgIGxsIGFucz0wOwogICAgZm9yIChsbCBpPW0tMTsgaT49MDsgaS0tKSB7CiAgICAgICAgaWYodltpXT09MCkgYW5zPWFkZChhbnMseCk7CiAgICAgICAgeD1tdWwoeCxrKTsKICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8IGVuZGw7Cn0KaW50IG1haW4oKSB7CiAgICBsbCB0PTE7CiAgICBjaW4gPj4gdDsKICAgIGZvciAoaW50IGk9MTsgaTw9dDsgaSsrKSB7CiAgICAgICAgc29sdmUoaSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=