#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) FOR(i, 0, n)
#define FOR(i, a, b) for(int i=a;i<b;i++)

#define N 2005
int m, n;
char s[N], t[N];
char c[2]={'I', 'O'};

int memo[N][N][2];
int DP(int, int, int);
inline int dp(int p, int q, int r){
	if(~memo[p][q][r]) return memo[p][q][r];
	else return memo[p][q][r]=DP(p, q, r);
}
int DP(int p, int q, int r){
	int ret = 0;
	if(p<m && s[p]==c[r]) ret=max(ret, dp(p+1, q, 1-r)+1);
	if(q<n && t[q]==c[r]) ret=max(ret, dp(p, q+1, 1-r)+1);
	// printf("dp(%d, %d, %d)=%d\n", p, q, r, ret);
	return ret;
}

int main(){
	scanf("%d%d", &m, &n);
	scanf("%s%s", s, t);
	int ans = 0;
	REP(i, N) REP(j, N) memo[i][j][0]=memo[i][j][1]=-1;
	REP(i, m){
		REP(j, n){
			int d = dp(i, j, 0);
			if(ans<d) ans=d;
		}
	}
	ans=(ans+1)/2*2-1;
	if(ans<0) ans=0;
	printf("%d\n", ans);
}