import std; void main () { int caseNum = readln.chomp.to!int; auto ans = new bool[](caseNum); foreach (caseId; 0 .. caseNum) { int N, M; readln.read(N, M); auto S = readln.split.to!(int[]); auto G = readln.split.to!(int[]); // 開始時点で重なっているならその順序は好きに変えられる。 // ただし、バラ → 重なるは不可能 // だから、Giが重なってるならSiも重なってないとダメ。 auto ord = iota(M).array; ord.sort!((a, b) => G[a] < G[b]); ans[caseId] = true; foreach (i; 0 .. M - 1) { int a = ord[i]; int b = ord[i + 1]; if (S[b] < S[a]) { ans[caseId] = false; } } foreach (i; 0 .. M - 1) { int a = ord[i]; int b = ord[i + 1]; if (G[a] == G[b] && (S[a] != S[b] || S[a] != G[a])) { ans[caseId] = false; } } } foreach (i; 0 .. caseNum) { writeln(ans[i] ? "Yes" : "No"); } } void read (T...) (string S, ref T args) { import std.conv : to; import std.array : split; auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }