1 #include<cstdio>
2 #include<cstring>
3 #include<cmath>
4 #include<ctime>
5 #include<iostream>
6 #include<algorithm>
7 #include<queue>
8 #include<set>
9 #define inf (0x7fffffff)
10 #define l(a) ((a)<<1)
11 #define r(a) ((a)<<1|1)
12 #define b(a) (1<<(a))
13 #define rep(i,a,b) for(int i=a;i<=(b);i++)
14 #define clr(a) memset(a,0,sizeof(a))
15 typedef long long ll;
16 typedef unsigned long long ull;
17 using namespace std;
18 int readint(){
19 int t=0,f=1;char c=getchar();
20 while(!isdigit(c)){
21 if(c=='-') f=-1;
22 c=getchar();
23 }
24 while(isdigit(c)){
25 t=(t<<3)+(t<<1)+c-'0';
26 c=getchar();
27 }
28 return t*f;
29 }
30 const int maxn=100009;
31 int n,ans,a[maxn],b[maxn],p[maxn],d[maxn],g[maxn];
32 int main(){
33 //freopen("#input.txt","r",stdin);
34 //freopen("#output.txt","w",stdout);
35 n=readint();
36 rep(i,1,n) a[i]=readint();
37 rep(i,1,n) b[i]=readint();
38 rep(i,1,n) p[a[i]]=i;
39 rep(i,1,n) b[i]=p[b[i]];
40 d[1]=1;g[1]=a[1];
41 rep(i,1,n){
42 if(b[i]>g[ans]){
43 g[++ans]=b[i];
44 d[i]=ans;
45 continue;
46 }
47 int t=lower_bound(g+1,g+ans+1,b[i])-g;
48 g[t]=b[i];
49 d[i]=t;
50 }
51 cout<<ans<<endl;
52 //fclose(stdin);
53 //fclose(stdout);
54 return 0;
55 }