#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int main() { int n, m; cin >> n >> m; string S, T; cin >> S >> T; vector > dp(n + 1, vector(m + 1)); for (int i = 0; i <= n; i++) dp[i][0] = i; for (int j = 0; j <= m; j++) dp[0][j] = j; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1; if (S[i - 1] == T[j - 1]) dp[i][j] = min(dp[i][j], dp[i - 1][j - 1]); else dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + 1); } cout << dp[n][m] << endl; }