#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXT=100005;
const int MAXN=5*MAXT;
const int MAXM=20*MAXT;
const int INF=0X3F3F3F3F;
int N,S,T,top=1,Ans;
int dep[MAXN],vis[MAXN];
int head[MAXN],cur[MAXN];
struct Node{int v,next,val;}node[MAXM];
void Addedge(int u,int v,int val1,int val2){
	node[++top].v=v;node[top].val=val1;node[top].next=head[u];head[u]=top;
	node[++top].v=u;node[top].val=val2;node[top].next=head[v];head[v]=top;
}
int bfs(int u,int v){
	queue<int>Q;
	while(!Q.empty())Q.pop();
	for(int i=S;i<=T;i++)
		cur[i]=head[i],dep[i]=INF,vis[i]=0;
	Q.push(u);dep[u]=v;
	while(!Q.empty()){
		u=Q.front();Q.pop();vis[u]=0;
		for(int i=head[u];i;i=node[i].next){
			v=node[i].v;
			if(dep[v]>dep[u]+1&&node[i].val){
				dep[v]=dep[u]+1;
				if(!vis[v]){
					Q.push(v);
					vis[v]=1;
				}
			}
		}
	}
	if(dep[T]==INF)return 0;
	return 1;
}
int dfs(int u,int flow){
	int rlow=0,used=0;
	if(u==T){
		Ans+=flow;
		return flow;
	}
	for(int i=cur[u];i;i=node[i].next){
		int v=node[i].v;cur[u]=i;
		if(node[i].val&&dep[v]==dep[u]+1)
			if(rlow=dfs(v,min(flow-used,node[i].val))){
				used+=rlow;
				node[i].val-=rlow;
				node[i^1].val+=rlow;
				if(used==flow)break;
			}
	}
	return used;
}
void Dinic(){
	while(bfs(S,0))dfs(S,INF);
}
int K,A[MAXT],B[MAXT];
int main(){
	//freopen("door.in","r",stdin);
	//freopen("door.out","w",stdout);
	scanf("%d",&K);
	for(int i=1;i<=K;i++)scanf("%d",&A[i]),A[i]++;
	for(int i=1;i<=K;i++)scanf("%d",&B[i]),B[i]++;
	S=0;T=K*2;
	for(int i=1;i<=K;i++){
		if(vis[i])continue;
		int t=i;T++;
		while(!vis[t]){
			vis[t]=1;
			Addedge(T,t,INF,INF);
			t=A[t];
		}
	}memset(vis,0,sizeof(vis));
	for(int i=1;i<=K;i++){
		if(vis[i])continue;
		int t=i;T++;
		while(!vis[t]){
			vis[t]=1;
			Addedge(T,t+K,INF,INF);
			t=B[t];
		}
	}memset(vis,0,sizeof(vis));T++;
	for(int i=1;i<=K;i++){
		if(i==A[i]&&i==B[i])//a=1 c=1
			Addedge(S,i,1,0),Addedge(i,T,1,0);
		if(i==A[i]&&i!=B[i])//b=1
			Addedge(S,i+K,1,0);
		if(i!=A[i]&&i==B[i])//c=1
			Addedge(i,T,1,0);
		if(i!=A[i]&&i!=B[i]&&A[i]==B[i])//e=f=1
			Addedge(i,i+K,1,1);
		if(i!=A[i]&&i!=B[i]&&A[i]!=B[i])//f=1
			Addedge(i,i+K,1,0);
	}//s->i (a),s->i+N (b),i->t (c),i+N->t (d),i+N->i (e),i->i+N (f)
	N=T;Dinic();printf("%d\n",K-Ans);
}