import bisect import math import sys from collections import defaultdict from itertools import accumulate from math import isqrt, inf from typing import List, Tuple sys.setrecursionlimit(10 ** 6) MOD = 998244353 int1 = lambda x: int(x) - 1 input = lambda: sys.stdin.readline().rstrip('\n') ii = lambda: int(input()) vi = lambda: list(map(int, input().split())) vi1 = lambda: list(map(int1, input().split())) def dbg(*args, **kwargs): print(*(repr(arg) for arg in args), *(f'{k}: {repr(v)}' for k, v in kwargs.items()), sep='; ', file=sys.stderr, flush=True) def solve(m, s, g): arr = sorted(range(len(s)), key=lambda x: s[x] + g[x]) for i in range(len(s) - 1): a, b = arr[i], arr[i + 1] if s[a] > s[b] or g[a] > g[b] or (g[a] == g[b] and s[a] != s[b]): return False n = len(s) g.sort() gg = [] prv = None prc = 0 for e in g: if prv != e: if prv is not None: gg.append((prv, prc)) prv = e prc = 1 else: prc += 1 gg.append((prv, prc)) ps = [0] pv = [0] st = defaultdict(int) for v, c in gg: if c == 1: pv[-1] += 1 else: ps.append(v) pv.append(0) st[v] = c ps.append(m + 1) pv.append(n) # print(ps, pv) s.sort() ptr = 0 for v in s: if st[v] != 0: st[v] -= 1 continue while v > ps[ptr + 1]: if pv[ptr] != 0: return False ptr += 1 # ps[ptr] <(=) v <= ps[ptr+1] if pv[ptr] == 0 and v == ps[ptr + 1]: ptr += 1 if pv[ptr] == 0: return False pv[ptr] -= 1 for x in st.values(): if x != 0: return False return True def main(): q = ii() for _ in range(q): n, m = vi() s = vi() g = vi() print('Yes' if solve(n, s, g) else 'No') def _start(): if (ret := main()) is not None: print(*ret) if isinstance(ret, List) or isinstance(ret, Tuple) else print(ret) if __name__ == '__main__': _start()