#include<bits/stdc++.h>
using namespace std;
char a[60][60];
int W[60],B[60],R[60];
int main()
{
int N,M;//N行M列
cin>>N>>M;memset(W,0,sizeof(W));memset(R,0,sizeof(R));memset(B,0,sizeof(B));
int sum=0,flag;
int tempi,maxb,maxr,maxw;
for(int i=1;i<=N;++i){
for(int j=1;j<=M;j++){
cin>>a[i][j];
}
}
//设1--n行涂W,n+1---m行涂B,m+1---N涂R
for(int i=1;i<=N;++i){
for(int j=1;j<=M;j++){
if(a[i][j]=='W') W[i]++;
if(a[i][j]=='B') B[i]++;
if(a[i][j]=='R') R[i]++;//每一行的价值算了出来
}//取最大值改变。
}
int max=B[1];
for(int i=2;i<=N-1;++i) {
if(max<B[i]){
tempi=i;
maxb=B[i];//记录下最大的B色
maxr=R[i];
maxw=W[i];
}
}
// for(int j=1;j<=M;j++) {//修改第一行和最后一行
// a[1][j]='W';a[N][j]='R';
sum+=M-W[1]+M-R[N];//第一行修改的
W[1]=M;R[N]=M;
// }
//条件:上一行必须是同色或者是上面该涂的才能改变
for(int i=2;i<=N-1;i++){//从第二行到倒数2行
if(W[i-1]==M)//如果上一行全为W,则下一行可以为W,B
{
if(W[i]>B[i])//优先涂W
{
sum+=M-W[i];//sum加上需要修改的个数
W[i]=M;R[i]=0;B[i]=0;
}
else {//涂B
sum+=M-B[i];B[i]=M;//全涂上了
R[i]=0;W[i]=0;
}
}
if(B[i-1]==M)//如果上一行全为B,则下一行可以为B,R
{
if(B[i]>=R[i])//优先涂B
{
sum+=M-B[i];flag=1;
B[i]=M;//全涂上了
R[i]=0;W[i]=0;
}
else {
sum+=M-R[i];R[i]=M;
B[i]=0;W[i]=0;
}
}
if(R[i-1]==M)// 如果上一行全为R,则下一行只能为R
{
sum+=M-R[i];R[i]=M;
B[i]=0;W[i]=0;
}
}
if(flag)
cout<<sum;//现在问题,B不一定有
else//如果没有B,则该涂B的位置 ,则几乎全是W,+1行R
{
sum=sum-(M-maxb)+M-maxb;cout<<sum;
}
return 0;
}