#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5, M = N<<3;
int n, P[N], Q[N], bP[N], bQ[N], S, T, tot = 1, hd[N<<1], cur[N<<1], nxt[M], to[M], cap[M], d[N<<1], ans;
void _add(int x, int y, int z) { nxt[++tot] = hd[x], to[tot] = y, cap[tot] = z, hd[x] = tot; }
void add(int x, int y, int z) { _add(x, y, z), _add(y, x, 0); }
bool bfs()
{
    static int q[N<<1], l, r; q[l=r=1] = S, memset(d+1, 0, sizeof(int)*T), d[S] = 1;
    while(l <= r) for(int x = q[l++], i = hd[x], y; i; i = nxt[i]) if(!d[y = to[i]]&&cap[i])
    {    d[y] = d[x]+1, q[++r] = y; if(y == T) return true; }
    return false;
}
int dfs(int x, int f)
{
    if(x == T) return f; int r = f, k;
    for(int &i = cur[x], y; i&&r; i = nxt[i]) if(d[y=to[i]] == d[x]+1&&cap[i])
        k = dfs(y, min(cap[i], r)), cap[i] -= k, r -= k, cap[i^1] += k, !k?d[y]=0:0;
    return f-r;
}
int main()
{
    scanf("%d", &n), S = n<<1, T = n<<1|1, ans = n;  
    for(int i = 1; i <= n; ++i) scanf("%d", P+i), ++P[i], bP[i] = i;
    for(int i = 1; i <= n; ++i) scanf("%d", Q+i), ++Q[i], bQ[i] = i+n;
    for(int i = 1; i <= n; ++i)
    {
        if(bP[i] == i) for(int x = P[i]; x != i; x = P[x]) bP[x] = i;
        if(bQ[i] == i+n) for(int x = Q[i]; x != i; x = Q[x]) bQ[x] = i+n;
    }
    for(int i = 1; i <= n; ++i)
        if(P[i] == i&&Q[i] == i) --ans;
        else if(Q[i] == i) add(S, bP[i], 1);
        else if(P[i] == i) add(bQ[i], T, 1);
        else if(P[i] != Q[i]) add(bQ[i], bP[i], 1);
        else add(bQ[i], bP[i], 1), add(bP[i], bQ[i], 1);
    while(bfs()) memcpy(cur+1, hd+1, sizeof(int)*T), ans -= dfs(S, n); printf("%d\n", ans);
    return 0;
}