#include #include using namespace std; int N, M; string S, T; int dp[1005][1005]; static const int INF = 10000000; int min(int x, int y, int z) { return min(min(x, y), z); } int rec(int i, int j){ if(dp[i][j] != INF) return dp[i][j]; if(i < 0 || j < 0) return 0; if(i == 0 && j == 0) return 0; if(i == 0 && j > 0) return j; if(j == 0 && i > 0) return i; int ret = INF; if(S[i-1] == T[j-1]) ret = rec(i-1, j-1); else { ret = 1 + min(rec(i-1, j-1), rec(i, j-1), rec(i-1, j)); } return dp[i][j] = ret; } int main(void){ for(int i = 0; i <= 1004; i++) for(int j = 0; j <= 1004; j++) dp[i][j] = INF; cin >> N >> M; cin >> S >> T; cout << rec(S.size(), T.size()) << endl; }