#include <bits/stdc++.h>
using namespace std;
const long long int INF = 1LL << 60;
const long long int N = 2e5 + 5;
long long int n, m, k, x, y, z, q;
int mod = 1e9 + 7;
long long int add(long long int a, long long int b) {
  if (a + b >= mod) return a + b - mod;
  return a + b;
}
long long int sub(long long int a, long long int b) {
  if (a < b) return a - b + mod;
  return a - b;
}
long long int mul(long long int a, long long int b) {
  return 1LL * a * b % mod;
}
long long int power(long long int a, long long int b) {
  if (b < 0) return 0;
  int re = 1;
  while (b) {
    if (b & 1) {
      re = mul(re, a);
    }
    a = mul(a, a);
    b >>= 1;
  }
  return re;
}
bool sortbysec(const pair<long long int, long long int> &a,
               const pair<long long int, long long int> &b) {
  return (a.second < b.second);
}
bool sortbyfi(
    const pair<long long int, pair<long long int, long long int>> &a,
    const pair<long long int, pair<long long int, long long int>> &b) {
  return (a.first > b.first);
}
const int mox[] = {+1, -1, +0, +0};
const int moy[] = {+0, +0, +1, -1};
priority_queue<pair<long long int, long long int>,
               vector<pair<long long int, long long int>>,
               greater<pair<long long int, long long int>>>
    ppq;
bool bs(long double xx) {
  long long int sb = xx / (x * y);
  long long int sb1 = xx / x;
  long long int sb2 = xx / y;
  if ((xx - sb1) < n or (xx - sb2) < m) return false;
  xx -= sb;
  long long int sum = m + n;
  return sum <= xx;
}
bool cmp1(std::pair<long long int, long long int> a,
          std::pair<long long int, long long int> b) {
  return a.second < b.second;
}
bool cmp2(std::pair<long long int, long long int> a,
          std::pair<long long int, long long int> b) {
  return a.second > b.second;
}
long long int modularExponentiation(long long int x, long long int n,
                                    long long int mod) {
  if (n == 0)
    return 1;
  else if (n % 2 == 0)
    return modularExponentiation((x * x) % mod, n / 2, mod);
  else
    return (x * modularExponentiation((x * x) % mod, (n - 1) / 2, mod)) % mod;
}
long long int modInverse(long long int A, long long int M) {
  return modularExponentiation(A, M - 2, M);
}
void Birdperson() {
  cin >> n >> k;
  long long int a[n + 10], b[n + 10], c[n + 10], d[n + 10];
  memset(c, 0, sizeof(c));
  a[0] = a[n + 1] = 0;
  c[0] = 1;
  for (int i = 1; i <= (n); ++i) {
    cin >> a[i];
    b[a[i]] = i;
  }
  for (int i = 0; i < (k); ++i) {
    cin >> d[i];
    c[d[i]] = 1;
  }
  long long int ans = 1;
  for (int i = 0; i < (k); ++i) {
    long long int choices = 2;
    if (c[a[b[d[i]] - 1]]) choices--;
    if (c[a[b[d[i]] + 1]]) choices--;
    ans = (ans * choices) % 998244353;
    if (!ans) break;
    c[d[i]] = 0;
  }
  cout << ans << "\n";
}
int main() {
  std::ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int t = 1;
  long long int ct = 1;
  cin >> t;
  while (ct <= t) {
    Birdperson();
    ++ct;
  }
}
