#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int MAXN = 100003;
int a[MAXN] , b[MAXN];
int s[MAXN] , dp[MAXN];
int n;
int flag[MAXN];
int lowbit( int x ){ return x & (-x);}
void add( int x , int delta ){
for( int i = x ; i<= n ; i += lowbit( i ) )
dp[i] = max( dp[i] , delta );
}
int query( int x ){
int sum = 0;
for( int i = x ; i ; i -= lowbit( i ) )
sum = max( sum , dp[i] );
return sum;
}
int main(){
scanf( "%d" , &n );
for( int i = 1 ; i <= n ; i ++ )
scanf( "%d" , &a[i] ) , flag[a[i]] = i ;
for( int i = 1 ; i <= n ; i ++ ){
scanf( "%d" , &b[i] );
s[i] = flag[b[i]];
}
memset( dp , 0 , sizeof( dp )) ;
for( int i = 1 ; i <= n ; i ++ ){
int t = query( s[i] - 1 ) + 1;
add( s[i] , t );
}
for( int i = 1 ;i <= n ; i ++ )
dp[0] = max( dp[0] , dp[i] );
printf( "%d" , dp[0] );
return 0;
}