#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
long long qpow(long long a, long long b, long long m) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % m;
    a = a * a % m, b >>= 1;
  }
  return ans;
}
long long qpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a;
    a = a * a, b >>= 1;
  }
  return ans;
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long inv(long long t, long long p) {
  return t == 1 ? 1 : (p - p / t) * inv(p % t, p) % p;
}
template <typename T>
inline void read(T &x) {
  x = 0;
  static int p;
  p = 1;
  static char c;
  c = getchar();
  while (!isdigit(c)) {
    if (c == '-') p = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c - 48);
    c = getchar();
  }
  x *= p;
}
const long long mod = 1e9 + 7;
const int maxn = 3e5 + 7;
long long a[maxn], d[4 * maxn], b[4 * maxn], c[maxn];
void build(long long l, long long r, long long p) {
  if (l == r) {
    d[p] = a[l];
    return;
  }
  long long m = (l + r) >> 1;
  build(l, m, p << 1);
  build(m + 1, r, (p << 1) | 1);
  d[p] = min(d[p << 1], d[(p << 1) | 1]);
}
void add(long long l, long long r, long long c, long long s, long long t,
         long long p) {
  if (l <= s && t <= r) {
    d[p] = c, b[p] += c;
    return;
  }
  long long m = (s + t) >> 1;
  if (l <= m) add(l, r, c, s, m, p << 1);
  if (r > m) add(l, r, c, m + 1, t, (p << 1) | 1);
  d[p] = min(d[p << 1], d[(p << 1) | 1]);
}
long long query(long long l, long long r, long long s, long long t,
                long long p) {
  if (l <= s && t <= r) return d[p];
  long long m = (s + t) >> 1;
  long long sum = 0x3f3f3f3f3f3f3f3f;
  if (l <= m) sum = min(sum, query(l, r, s, m, p << 1));
  if (r > m) sum = min(sum, query(l, r, m + 1, t, (p << 1) | 1));
  return sum;
}
vector<int> pos[maxn];
int n, cnt[maxn];
bool solve() {
  for (int i = 1; i <= n; ++i) {
    int siz = (int)pos[c[i]].size();
    if (siz <= cnt[c[i]]) return false;
    int now = pos[c[i]][cnt[c[i]]++];
    if (query(1, now, 1, n, 1) < c[i]) return false;
    add(now, now, n + 1, 1, n, 1);
  }
  return true;
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
      cnt[i] = 0, pos[i].clear(), d[i] = 0x3f3f3f3f3f3f3f3f;
    for (int i = 1; i <= n; ++i) {
      scanf("%lld", &a[i]);
      pos[a[i]].push_back(i);
    }
    for (int i = 1; i <= n; ++i) scanf("%lld", &c[i]);
    build(1, n, 1);
    if (solve())
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
