#include <bits/stdc++.h>

using namespace std;

#define F first
#define S second

const int N = 1010;

int n;
int g[N], r[N];
vector<int> rg[N], rr[N];
bool dp[N][N];

bool check() {
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
      if (dp[i][j] == 0) return 0;
  return 1;
}

int main() {
  int p;
  scanf("%d", &p);
  while (p--) {
    int _;
    scanf("%d%d", &_, &n);
    memset(dp, 0, sizeof(dp));
    for (int i = 0; i < n; ++i) {
      rr[i].clear();
      rg[i].clear();
    }
    for (int i = 0; i < n; ++i) {
      scanf("%d", r + i);
      rr[r[i]].push_back(i);
    }
    for (int i = 0; i < n; ++i) {
      scanf("%d", g + i);
      rg[g[i]].push_back(i);
    }
    queue<pair<int, int> > q;
    for (int i = 0; i < n; ++i) {
      dp[i][i] = 1;
      q.push(make_pair(i, i));
    }
    while (q.size()) {
      auto t = q.front();
      q.pop();
      int x = t.F, y = t.S;
      for (auto i : rg[x]) {
        for (auto j : rg[y]) {
          if (!dp[i][j]) {
            dp[i][j] = 1;
            q.push(make_pair(i, j));
          }
        }
      }
      for (auto i : rr[x]) {
        for (auto j : rr[y]) {
          if (!dp[i][j]) {
            dp[i][j] = 1;
            q.push(make_pair(i, j));
          }
        }
      }
    }
    printf("%d ", _);
    puts(check() ? "YES" : "NO");
  }
  return 0;
}
