#include #include #include #include #include #include using namespace std; typedef long long LL; const int N = 100005, M = 1e9 + 7; int a[20]; int f[200005]; int ans[100005]; int main() { int T, n, m; scanf("%d", &T); while (T--) { scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); for (int i = 1; i <= 200000;++i) f[i] = M; for (int i = 0; i < (1 << n); ++i){ int t1 = 0, t2 = 0; for (int j = 0; j < n; ++j) if ((1 << j) & i) t1 ^= a[j + 1], ++t2; f[t1] = min(f[t1], t2); } for (int i = 0; i < 17; ++i) { int t1 = 1 << i; for (int j = 0; j <= 200000; ++j) { int now = j ^ t1; if (now > 200000) continue; f[j] = min(f[j], f[now] + 1); } } for (int i = 1, x, y; i <= m; ++i) { scanf("%d%d", &x, &y); ans[i] = f[x ^ y]; } LL sum = 0; for (int i = 1; i <= m; ++i) (sum += (LL)i * ans[i]) %= M; printf("%I64d\n",sum); } return 0; }