//最长公共子序列问题(LCS)
#include<iostream>
using namespace std;
const int maxn=10010;
int dp[maxn][maxn];
int n,m;
char a[maxn],b[maxn];
void init(){
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>b[i];
}
void solve(){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i+1]==b[j+1]) dp[i+1][j+1]=dp[i][j]+1;
else{
dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);
}
}
}
cout<<dp[n][m]<<endl;
}
int main(){
init();
solve();
}