_Aurore_ @ 2022-10-21 13:22:29
#include<bits/stdc++.h>
#define int long long
#define INF 1000000000000000
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n,m,a[101];
int peo[1<<10],dp[1<<10][1<<10][3];
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
char ch;cin>>ch;
if(ch=='H')
a[i]=a[i]*2+1;
else
a[i]=a[i]*2;
}
for(int i=0;i<(1<<m);i++){
int x=i;
while(x){
if(x&1)
peo[i]++;
x>>=1;
}
}
for(int i=0;i<(1<<m);i++)
if(!(i&a[1])&&!(i&(i<<1))&&!(i&(i<<2)))
dp[0][i][0]=peo[i];
for(int i=0;i<(1<<m);i++)
if(!(i&a[1])&&!(i&(i<<1))&&!(i&(i<<2)))
for(int j=0;j<(1<<m);j++)
if(!(j&a[2])&&!(j&(j<<1))&&!(j&(j<<2))&&!(i&j))
dp[i][j][1]=peo[i]+peo[j];
int now=1;
for(int i=3;i<=n;i++){
now=(now==2)?0:now+1;
for(int j=0;j<(1<<m);j++)
if(!(j&a[i-1])&&!(j&(j<<1))&&!(j&(j<<2)))
for(int k=0;k<(1<<m);k++)
if(!(k&a[i])&&!(k&(k<<1))&&!(k&(k<<2))&&!(j&k))
for(int l=0;l<(1<<m);l++)
if(!(l&j)&&!(l&k)&&!(l&&a[i-2])&&!(l&(l<<1))&&!(l&(l<<2)))
dp[j][k][now]=max(dp[j][k][now],dp[l][j][(!now)?2:now-1]+peo[k]);
}
int ans=0;
for(int i=0;i<(1<<m);i++)
if(!(i&&a[n-1])&&!(i&(i<<1))&&!(i&(i<<2)))
for(int j=0;j<(1<<m);j++)
if(!(i&j)&&!(j&a[n])&&!(j&(j<<1))&&!(j&(j<<2)))
ans=max(ans,dp[i][j][now]);
cout<<ans;
return 0;
}