#include<bits/stdc++.h>
using namespace std;
const int MAXN=10001;
int hashtable[MAXN];
int d[MAXN];
int a[MAXN];
int main()
{
//freopen("in.txt","r",stdin);
fill(hashtable,hashtable+MAXN,-1);
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int temp;cin>>temp;
hashtable[temp]=i;
}
int num=0;int k;cin>>k;
for(int i=0;i<k;i++){
int temp;cin>>temp;
if(hashtable[temp]>=0){
a[num]=hashtable[temp];
num++;
}
}
int ans=-1;
for(int i=0;i<num;i++){
d[i]=1;
for(int j=0;j<i;j++){
if(a[i]>=a[j]&&d[j]+1>d[i]){
d[i]=d[j]+1;
}
}
ans=max(ans,d[i]);
}
cout<<ans;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10001;
int d[MAXN][MAXN];
int a[MAXN],b[MAXN];
int main()
{
freopen("in.txt","r",stdin);
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a[i];
}
int k;cin>>k;
for(int i=1;i<=k;i++){
cin>>b[i];
}
for(int i=0;i<=m;i++){
d[i][0]=0;
}
for(int i=0;i<=k;i++){
d[0][i]=0;
}
for(int i=1;i<=m;i++){
for(int j=1;j<=k;j++){
if(a[i]==b[j]){
d[i][j]=max(d[i][j-1],d[i-1][j])+1;
}else{
d[i][j]=max(d[i][j-1],d[i-1][j]);
}
}
}
cout<<d[m][k];
return 0;
}