#include <algorithm>
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
int dp[1001][1001] = {0};
int main() {
int m, n;
cin >> m >> n;
string str1, str2;
cin >> str1 >> str2;
for (int i = 0; i < n; ++i) {
dp[0][i] = 0;
}
for (int i = 0; i < m; ++i)
dp[i][0] = 0;
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (str1[i - 1] == str2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = std::max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
cout << dp[m][n] << endl;
return 0;
}