#include <bits/stdc++.h>
using namespace std;
int f[110][110][110], a[110], sta[110], num[110];
int get(int n) {
int ans = 0;
while (n) {
if (n & 1) ans++;
n >>= 1;
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
char x;
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> x, a[i] = (a[i] << 1) + (x == 'H');
int maxn = (1 << m) - 1, cnt = 0;
for (int i = 0; i <= maxn; i++)
if (i & (i << 1) == 0 && i & (i << 2) == 0)
sta[++cnt] = i, num[cnt] = get(i);
for (int i = 1; i <= cnt; i++)
if (sta[i] & a[1] == 0)
f[1][i][1] = num[i];
for (int i = 1; i <= cnt; i++)
if (sta[i] & a[2] == 0)
for (int j = 1; j <= cnt; j++)
if (sta[i] & sta[j] == 0 && sta[j] & a[1] == 0)
f[2][i][j] = num[j] + num[i];
for (int p = 3; p <= n; p++)
for (int i = 1; i <= cnt; i++)
if (sta[i] & a[p] == 0)
for (int j = 1; j <= cnt; j++)
if (sta[i] & sta[j] == 0 && sta[j] & a[p - 1] == 0)
for (int k = 1; k <= cnt; k++)
if (sta[i] & sta[k] == 0 && sta[j] & sta[k] == 0 && sta[k] & a[p - 2] == 0)
f[p][i][j] = max(f[p][i][j], f[p - 1][j][k] + num[i]);
int ans = 0;
for (int i = 1; i <= cnt; i++)
for (int j = 1; j <= cnt; j++)
ans = max(ans, f[n][i][j]);
cout << ans;
return 0;
}