#include <iostream>
#include <cstdlib>
using namespace std;

int dp[2010][2010][2]={0};
bool S[2010],T[2010];
int main(){
	int M,N,ma,cnt;
	char ch;
	cin>>M>>N;
	for(int i=0;i<M;i++){
		cin>>ch;
		if(ch=='I')S[i]=true;
		else S[i]=false;
	}
	for(int i=0;i<N;i++){
		cin>>ch;
		if(ch=='I')T[i]=true;
		else T[i]=false;
	}
	
	for(int i=M;i>=0;i--){
		for(int j=N;j>=0;j--){
			//O
			ma=0;
			if(i<M&&S[M-i-1]==true){
				ma=max(ma,dp[i+1][j][1]+1);
			}
			if(j<N&&T[N-j-1]==true){
				ma=max(ma,dp[i][j+1][1]+1);
			}
			dp[i][j][0]=ma;
			//I
			ma=0;
			if(i<M&&S[M-i-1]==false&&dp[i+1][j][0]>0){
				ma=max(ma,dp[i+1][j][0]+1);
			}
			if(j<N&&T[N-j-1]==false&&dp[i][j+1][0]>0){
				ma=max(ma,dp[i][j+1][0]+1);
			}
			dp[i][j][1]=ma;
		}
	}
	cnt=0;
	for(int i=0;i<=M;i++){
		for(int j=0;j<=N;j++){
			//cout<<dp[i][j][0]<<" ";
			cnt=max(cnt,dp[i][j][0]);
		}
		//cout<<endl;
	}
	//cout<<endl;
	/*
	for(int i=0;i<=M;i++){
		for(int j=0;j<=N;j++){
			cout<<dp[i][j][1]<<" ";
		}
		cout<<endl;
	}
	*/
	cout<<cnt<<endl;
	return 0;
}