//
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+4;
int a[N],b[N],dp[N][N];
int n,m;
void solve()
{
memset( dp,0,sizeof( dp ) );
for( int i=1;i<=n;i++ )
for( int j=1;j<=m;j++ )
{
if( a[i]==b[j] ) dp[i][j]=max( dp[i][j],dp[i-1][j-1]+1 );
else dp[i][j]=max( dp[i-1][j],dp[i][j-1] );
}
}
int main()
{
int i;
while( cin>>n>>m ) // 01 dp[0][0] 方便处理起始条件
{ // 02 dp[n][m] 可以直接输出
for( i=1;i<=n;i++ ) cin>>a[i];
for( i=1;i<=m;i++ ) cin>>b[i];
solve();
cout<<dp[n][m]<<endl;
}
return 0;
}