#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n; int m; int dp[1002][1002]; string s; string t; bool use[1002][1002]; inline int dfs(int a, int b){ if (a == s.size() && b == t.size()){ return 0; } if (a == s.size()){ return t.size() - b; } if (b == t.size()){ return s.size() - a; } if (use[a][b]){ return dp[a][b]; } use[a][b] = true; dp[a][b] = INT_MAX; if (s[a] == t[b]){ dp[a][b] = dfs(a + 1, b + 1); } dp[a][b] = min(dp[a][b],dfs(a + 1, b + 1) + 1); dp[a][b] = min(dp[a][b], dfs(a + 1, b) + 1); dp[a][b] = min(dp[a][b], dfs(a, b + 1) + 1); return dp[a][b]; } int main(){ cin >> n; cin >> m; cin >> s; cin >> t; int ans = dfs(0, 0); cout << ans << endl; return 0; }