#!/usr/bin/env python3
# CANONICAL: use this solution to generate answers.
n = int(input())
a = [int(x)-1 for x in input().split()]
b = [int(x)-1 for x in input().split()]

def gcd(a, b): return a if b==0 else gcd(b, a%b)
def lcm(a,b): return a//gcd(a,b)*b
def egcd(a, b):
    if b==0: return (1, 0, a)
    (s, t, d) = egcd(b, a%b)
    return (t, s-a//b*t, d)
def crt(a, b):
    s, t, d = egcd(a[1], b[1])
    if a[0]%d != b[0]%d: return (0, -1)
    return ((s*b[0]%b[1]*a[1] + t*a[0]%a[1]*b[1])//d, a[1]//d*b[1])

# Even
e = 1
ab = [0] * n
for i in range(n): ab[i] = b[a[i]]
done = [False] * n
for i in range(n):
    if done[i]: continue
    l = 0
    while not done[i]:
        done[i] = True
        i = ab[i]
        l += 1
    e = lcm(e, l)
e *= 2

# Odd
ai = [0] * n
for i in range(n): ai[a[i]] = i
done = [False] * n
odd = (0, 1)
for i in range(n):
    if done[i]: continue
    offset, period = -1, 0
    target = ai[i]
    while True:
        if i == target: offset = period
        done[i] = True
        i = ab[i]
        period += 1
        if done[i]: break
    if offset >= 0:
        for k in range(period):
            if ai[i] != target:
                offset = -1
                break
            i = ab[i]
            target = ab[target]
    if offset == -1:
        print(e)
        exit(0)
    odd = crt(odd, (offset, period))
    if odd[1] == -1:
        print(e)
        exit(0)

print(min(e, 2*odd[0]+1))
