import sys
input = sys.stdin.readline
inf = float('inf')

# 一点更新　区間取得　1-indexed
class SegmentTree:
    def __init__(self, n):
        tmp = 1
        while tmp < n:
            tmp <<= 1
        # self.N : 完全二分木の葉の数(N以上の最小の2べき)
        self.N = tmp
        # 2*self.N - 1 : 完全二分木のノード数
        # 1-indexedで管理するので１つ余分に設ける
        self.Data = [(inf, -1) for _ in range(2*self.N)]

    # k (0-indexed)
    def update(self, k, x):
        #　インデックスを補正
        k += self.N
        # 指定ノードを更新
        self.Data[k] = x
        # kを含む区間ノードを更新していく
        while k > 1:
            k >>= 1
            self.Data[k] = min([self.Data[2*k], self.Data[2*k+1]])

    # [l, r) (0-indexed)
    def query(self, l, r):
        #　インデックスを補正
        l += self.N
        r += self.N
        # 返り値を初期化
        res = [inf, -1]
        while l < r:
            # 右側なら右側を更新 右上に行く
            # 左側なら更新しない　上に行く
            if l & 1:
                res = min([res, self. Data[l]])
                l += 1
            # 右側なら左側を更新　上に行く
            # 左側なら更新しない 上に行く
            if r & 1:
                r -= 1
                res = min([res, self.Data[r]])
            l >>= 1; r >>= 1
        return res

    def value(self, k):
        return st.query(k, k+1)

N = int(input())
A = list(map(int,input().split()))
B = list(map(int,input().split()))

C = [(a, b) for a, b in zip(A, B)]
C = sorted(C, key=lambda x:(x[1], x[0]))
A = [c[0] for c in C]
B = [c[1] for c in C]

st = SegmentTree(N)
for i, a in enumerate(A):
    st.update(i, [a, i])

ans = 0
for i, b in enumerate(B):
    a = st.value(i)[0]
    if a <= b:
        pass
    else:
        # 見ているところより右から最小のものを選んでくる
        v, vi = st.query(i, N)
        if not v <= b:
            print("No")
            exit()
        st.update(i, [vi, i])
        st.update(vi, [b, vi])
        ans += 1

if ans <= N-2:
    print("Yes")
else:
    print("No")