#include<bits/stdc++.h>
#define bp __builtin_popcount
#define int long long
using namespace std;
const int N=2050;
int n,m,res,cnt[N],sit[110][N][2],f[110][N],ans,a[N];
bool cmp(int s0,int s1,int a0,int a1){
if((s0&a0)==0&&(s1&a1)==0)return 1;
return 0;
}
signed main(){
char x;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>x;
if(x=='P')a[i]<<=1;
else a[i]<<=1,a[i]++;
}
for(int i=1;i<=n;i++){
for(int s0=0;s0<(1<<m);s0++)
for(int s1=0;s1<(1<<m);s1++)
if(cmp(s0,s1,a[i],a[i-1])&&(((s0<<2)|(s0<<1)|(s0>>1)|(s0>>2))&s0)==0&&(((s1<<2)|(s1<<1)|(s1>>1)|(s1>>2))&s1)==0&&((s0&s1)==0))
sit[i][++cnt[i]][0]=s0,sit[i][cnt[i]][1]=s1;
}
for(int i=1;i<=cnt[1];i++)f[1][i]=bp(sit[1][i][0]);
for(int i=1;i<=n;i++)
for(int res=1;res<=cnt[i];res++){
for(int l=1;l<=cnt[i-1];l++){
if(sit[i][res][1]==sit[i-1][l][0]&&(sit[i][res][0]&sit[i-1][l][1])==0&&f[i-1][l]!=0){
f[i][res]=max(f[i][res],f[i-1][l]+bp(sit[i][res][0]));
}
}
}
for(int i=1;i<=cnt[n];i++)
ans=max(ans,f[n][i]);
cout<<ans<<endl;
return 0;
}