import sys int1 = lambda x: int(x) - 1 # input = lambda: sys.stdin.buffer.readline() input = lambda: sys.stdin.readline().rstrip() ii = lambda: int(input()) i1 = lambda: int1(input()) mi = lambda: map(int, input().split()) mi1 = lambda: map(int1, input().split()) li = lambda: list(mi()) li1 = lambda: list(mi1()) lli = lambda n: [li() for _ in range(n)] INF = float("inf") # mod = int(1e9 + 7) mod = 998244353 class dsu: n = 1 parent_or_size = [-1 for i in range(n)] def __init__(self, N): self.n = N self.parent_or_size = [-1 for i in range(N)] def merge(self, a, b): assert 0 <= a < self.n, "0<=a 0: result2.append(result[i]) return result2 n, k = mi() a = li() b = li() if a == b: print("Yes") exit() if sorted(a) != sorted(b): print("No") exit() if k <= 2: print("Yes") exit() if k > n: print("No") exit() if k == n: print("Yes" if a == b or a == b[::-1] else "No") exit() uf = dsu(n) for i in range(k + 1, n - 1): uf.merge(i, i - (k + 1)) uf.merge(i, i + 1) uf.merge(n - 1 - i, n - 1 - i + k + 1) uf.merge(n - 1 - i, n - 1 - (i + 1)) if k == 3: for i in range(n - 2): uf.merge(i, i + 2) sa = [list() for i in range(n)] sb = [list() for i in range(n)] for i in range(n): r = uf.leader(i) sa[r].append(a[i]) sb[r].append(b[i]) ans = "Yes" for i in range(n): if sorted(sa[i]) != sorted(sb[i]): ans = "No" break if k == 3: print(ans) exit() if ans == "No": r = uf.leader(0) x = [a[i] for i in range(n) if uf.leader(i) != r] y = [b[i] for i in range(n) if uf.leader(i) != r] if sorted(sa[r]) == sorted(sb[r]) and (x == y or x == y[::-1]): ans = "Yes" print(ans)