#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void in(T &x) {
  x = 0;
  char c = getchar();
  bool f = 0;
  while (!isdigit(c)) f |= (c == '-'), c = getchar();
  while (isdigit(c)) x = x * 10 + (c ^ '0'), c = getchar();
  f ? x = -x : 0;
}
template <class T>
inline void out(T x, const char c = '\n') {
  static short st[30];
  short tp = 0;
  if (x < 0) putchar('-'), x = -x;
  do st[++tp] = x % 10, x /= 10;
  while (x);
  while (tp) putchar('0' | st[tp--]);
  putchar(c);
}
template <class T>
inline void err(const T &x, const char c = '\n') {
  cerr << x << c;
}
template <class T, class... Args>
inline void err(const T &x, const Args &...args) {
  err(x, ' '), err(args...);
}
const int md = 998244353;
inline int qpow(int a, int b) {
  int r = 1;
  for (; b; b >>= 1, a = (long long)a * a % md)
    if (b & 1) r = (long long)r * a % md;
  return r;
}
inline int fit(const int x) { return x >= md ? x - md : x; }
namespace i207M {
const int N = 300005;
const int M = N * 4;
const int rt = 1;
const int inf = 1e9;
int mn[M];
int a[N];
inline void up(int x) { mn[x] = min(mn[(x << 1)], mn[(x << 1 | 1)]); }
void build(int x, int l, int r) {
  if (l == r) {
    mn[x] = a[l];
    return;
  }
  int mid((l + r) >> 1);
  build((x << 1), l, mid), build((x << 1 | 1), mid + 1, r);
  up(x);
}
void upd(int x, int l, int r, int p, int v) {
  if (l == r) {
    mn[x] = v;
    return;
  }
  int mid((l + r) >> 1);
  if (p <= mid)
    upd((x << 1), l, mid, p, v);
  else
    upd((x << 1 | 1), mid + 1, r, p, v);
  up(x);
}
int ask(int x, int l, int r, int qr) {
  if (r <= qr) return mn[x];
  int mid((l + r) >> 1);
  if (qr <= mid) return ask((x << 1), l, mid, qr);
  return min(mn[(x << 1)], ask((x << 1 | 1), mid + 1, r, qr));
}
int n;
int hd[N], cnt, v[N], nx[N];
inline void clear() {
  for (register int i = 1; i <= n; ++i) hd[i] = 0;
  cnt = 0;
}
signed main() {
  int T;
  in(T);
  while (T--) {
    clear();
    in(n);
    for (register int i = 1; i <= n; ++i) {
      in(a[i]);
    }
    for (register int i = n; i >= 1; --i) {
      v[++cnt] = i, nx[cnt] = hd[a[i]], hd[a[i]] = cnt;
    }
    build(rt, 1, n);
    bool ok = 1;
    for (register int i = 1, b, p; i <= n; ++i) {
      in(b);
      if (!ok) continue;
      if (!hd[b]) {
        ok = 0;
        continue;
      }
      p = v[hd[b]];
      hd[b] = nx[hd[b]];
      if (ask(rt, 1, n, p) < b) {
        ok = 0;
        continue;
      }
      upd(rt, 1, n, p, inf);
    }
    puts(ok ? "YES" : "NO");
  }
  return 0;
}
}  // namespace i207M
signed main() {
  i207M::main();
  return 0;
}
