#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int inf = 0x3f3f3f3f;
const int maxn = 3e5 + 5;
int n;
int a[maxn];
int mn[maxn * 4];
void build(int i, int L, int R) {
  if (L == R) {
    mn[i] = a[L];
    return;
  }
  int mid = (L + R) >> 1;
  build(i << 1, L, mid);
  build((i << 1) | 1, mid + 1, R);
  mn[i] = min(mn[i << 1], mn[(i << 1) | 1]);
}
int ask(int i, int L, int R, int pos) {
  if (R <= pos) return mn[i];
  if (L > pos) return inf;
  int mid = (L + R) >> 1;
  return min(ask(i << 1, L, mid, pos), ask((i << 1) | 1, mid + 1, R, pos));
}
void change(int i, int L, int R, int pos, int v) {
  if (L == R) {
    mn[i] = v;
    return;
  }
  int mid = (L + R) >> 1;
  if (mid >= pos)
    change(i << 1, L, mid, pos, v);
  else
    change((i << 1) | 1, mid + 1, R, pos, v);
  mn[i] = min(mn[i << 1], mn[(i << 1) | 1]);
}
queue<int> pos[maxn];
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  int T;
  cin >> T;
  while (T--) {
    cin >> n;
    for (int i = 1; i <= n; i++) {
      cin >> a[i];
      pos[a[i]].push(i);
    }
    build(1, 1, n);
    bool ok = true;
    for (int i = 1; i <= n; i++) {
      int x, y;
      cin >> x;
      if (pos[x].empty())
        ok = false;
      else {
        y = pos[x].front();
        pos[x].pop();
        if (ask(1, 1, n, y) < x) ok = false;
        change(1, 1, n, y, inf);
      }
    }
    if (ok)
      cout << "YES\n";
    else
      cout << "NO\n";
    for (int i = 1; i <= n; i++) {
      while (!pos[a[i]].empty()) pos[a[i]].pop();
    }
  }
  return 0;
}
