#include <bits/stdc++.h>
#define int long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define lg2(n) (63-__builtin_clzll(n))
#define mask(n) (1LL << (n))
#define TASK ""
#define openfile(); if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}
#define lc(n) (n << 1)
#define rc(n) ((n << 1) | 1)
#define fi first
#define se second
#define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
#define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)
#define mii map<int,int>
#define umi unordered_map<int, int>
#define pii pair<int,int>
#define vi vector<int>
using namespace std;
const int oo = 1e18;
const int mod = 1e9 + 9;
const int nmax = 1e3 + 8;
const int base = 311;
int n, m, k, a[nmax], b[nmax], dp[nmax][nmax];
main(){
fast;
openfile();
cin >> n >> m;
int ans = 0;
FOR(i, 1, n, 1) cin >> a[i];
FOR(i, 1, m, 1) cin >> b[i];
// dp[0][0] = 1;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= m; ++j){
if(a[i] == b[j]){
dp[i][j] = dp[i - 1][j - 1] + 1;
}
else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
// ans = max(ans, dp[i][j]);
}
}
cout << dp[n][m];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwojZGVmaW5lIGxnMihuKSAoNjMtX19idWlsdGluX2NsemxsKG4pKQojZGVmaW5lIG1hc2sobikgKDFMTCA8PCAobikpCiNkZWZpbmUgVEFTSyAiIgojZGVmaW5lIG9wZW5maWxlKCk7ICBpZiggZm9wZW4oVEFTSyIuaW5wIiwgInIiKSl7ZnJlb3BlbihUQVNLIi5pbnAiLCAiciIsIHN0ZGluKTtmcmVvcGVuKFRBU0siLm91dCIsICJ3Iiwgc3Rkb3V0KTt9CiNkZWZpbmUgbGMobikgKG4gPDwgMSkKI2RlZmluZSByYyhuKSAoKG4gPDwgMSkgfCAxKQoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIEZPUihpLCBsLCByLCBrKSBmb3IoIGludCBpID0gbDsgaSA8PSByOyBpICs9IGspCiNkZWZpbmUgRk9EKGksIHIsIGwsIGspIGZvciggaW50IGkgPSByOyBpID49IGw7IGkgLT0gaykKCiNkZWZpbmUgbWlpIG1hcDxpbnQsaW50PgojZGVmaW5lIHVtaSB1bm9yZGVyZWRfbWFwPGludCwgaW50PgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgb28gPSAxZTE4Owpjb25zdCBpbnQgbW9kID0gMWU5ICsgOTsKY29uc3QgaW50IG5tYXggPSAxZTMgKyA4Owpjb25zdCBpbnQgYmFzZSA9IDMxMTsKCmludCBuLCBtLCBrLCBhW25tYXhdLCBiW25tYXhdLCBkcFtubWF4XVtubWF4XTsKCm1haW4oKXsKICAgIGZhc3Q7CiAgICBvcGVuZmlsZSgpOwogICAgY2luID4+IG4gPj4gbTsKICAgIGludCBhbnMgPSAwOwogICAgRk9SKGksIDEsIG4sIDEpIGNpbiA+PiBhW2ldOwogICAgRk9SKGksIDEsIG0sIDEpIGNpbiA+PiBiW2ldOwovLyAgICBkcFswXVswXSA9IDE7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47ICsraSl7CiAgICAgICAgZm9yKGludCBqID0gMTsgaiA8PSBtOyArK2opewogICAgICAgICAgICBpZihhW2ldID09IGJbal0pewogICAgICAgICAgICAgICAgZHBbaV1bal0gPSBkcFtpIC0gMV1baiAtIDFdICsgMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGRwW2ldW2pdID0gbWF4KGRwW2kgLSAxXVtqXSwgZHBbaV1baiAtIDFdKTsKLy8gICAgICAgICAgICAgICAgYW5zID0gbWF4KGFucywgZHBbaV1bal0pOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgZHBbbl1bbV07Cn0K