#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int lib[65], ln;
int dp[5][65][65], n, m, cnt;
int map[105];
char ch;
int tot(int x) {
int cntt = 0;
while(x > 0) {
cntt += (x & 1);
x >>= 1;
}
return cntt;
}
int main() {
scanf("%d %d", &n, &m);
for(int i = 0; i < (1 << m); i++) {
if(!(i & (i << 1)) && !(i & (i << 2))) {
lib[ln++] = i;
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
map[i] <<= 1;
cin >> ch;
if(ch == 'H') map[i]++;
}
for(int j = 0; j < ln; j++) {
for(int k = 0; k < ln; k++) {
dp[i & 1][j][k] = 0;
}
}
for(int j = 0; j < ln; j++) {
if(i) if(lib[j] & map[i - 1]) continue;
for(int k = 0; k < ln; k++) {
if(i >= 2) if(lib[k] & map[i - 2]) continue;
if(lib[j] & lib[k]) continue;
for(int l = 0; l < ln; l++) {
if(lib[l] & map[i] || lib[l] & lib[j] || lib[l] & lib[k]) continue;
dp[i & 1][l][j] = max(dp[1 - (i & 1)][j][k] + tot(lib[l]), dp[i & 1][l][j]);
}
}
}
for(int j = 0; j < ln; j++) {
for(int k = 0; k < ln; k++) {
if(!(j & k))cnt = max(cnt, dp[i & 1][j][k]);
}
}
}
printf("%d\n", cnt);
}