#include <iostream>
#include <vector>
#define STD_BOARD_SIZE 8
using namespace std;
string getStdBoard(bool isStartW);
int compareString(string a, string b);
int compareBoard(string* board);
string* sliceBoard(string* board, int x, int y);
int main(){
int n, m;
cin >> n >> m;
string* board = new string[n];
for(int i = 0; i < n; i++){
cin >> board[i];
}
int smallest = n * m;
for(int i = 0; i < n - STD_BOARD_SIZE + 1; i++){
for(int j = 0; j < m - STD_BOARD_SIZE + 1; j++){
string* slicedBoard = sliceBoard(board, j, i);
int tmp = compareBoard(slicedBoard);
if(smallest > tmp) smallest = tmp;
}
}
cout << smallest << endl;
}
string getStdBoard(bool isStartW){
string w = "WBWBWBWB";
string b = "BWBWBWBW";
if(isStartW) return w;
else return b;
}
int compareString(string a, string b){
int diff = 0;
for(int i = 0; i < STD_BOARD_SIZE; i++){
if(a[i] != b[i]) diff++;
}
return diff;
}
int compareBoard(string* board){
int whiteStart = 0;
int blackStart = 0;
bool colorFlag = true;
for(int i = 0; i < STD_BOARD_SIZE; i++){
whiteStart += compareString( getStdBoard(colorFlag), board[i] );
blackStart += compareString( getStdBoard(!colorFlag), board[i] );
colorFlag = !colorFlag;
}
if(whiteStart < blackStart) return whiteStart;
else return blackStart;
}
string* sliceBoard(string* board, int x, int y){
string* tmp = new string[STD_BOARD_SIZE];
for(int i = 0; i < STD_BOARD_SIZE; i++){
tmp[i] = board[y + i].substr(x, x + 8);
}
return tmp;
}