#include<bits/stdc++.h>
using namespace std;
int n,m;
int dp[5][1030][1030];
int p,s[1030],sum[1030];
char mp[105][15];
int mp1[105];
bool dis[1030][1030];
int maxn;
void init()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];
mp1[i]=mp1[i]*2+(mp[i][j]=='P'?1:0);
}
}
for(int i=0;i<(1<<m);i++)
{
if((i&(i<<1))||(i&(i<<2)))
continue;
bool q=0;
int k=0;
for(int j=n;j>=0;j--)
{
if((i>>(n-j))&1)
{
k++;
}
}
if(q==1)
continue;
s[++p]=i;
sum[p]=k;
}
for(int i=1;i<=p;i++)
{
for(int j=1;j<=p;j++)
{
for(int k=0;k<=n;k++)
{
if((s[i]>>k)&1==1&&(s[j]>>k)&1==1)
{
dis[i][j]=dis[j][i]=1;
break;
}
}
}
}
}
void dfs()
{
for(int i=1;i<=p;i++)
{
bool q=0;
for(int k=0;k<=n;k++)
{
if(!((mp1[1]>>k)&1)&&((s[i]>>k)&1))
{
q=1;
break;
}
}
if(q==1)
continue;
dp[1][i][1]=sum[i];
}
for(int i=2;i<=n;i++)
{
for(int j=1;j<=p;j++)
{
bool q=0;
for(int k=0;k<=n;k++)
{
if(!((mp1[i]>>k)&1)&&((s[j]>>k)&1))
{
q=1;
break;
}
}
if(q==1)
continue;
for(int k=1;k<=p;k++)
{
if(dis[j][k]==1)
continue;
for(int l=1;l<=p;l++)
{
if(dis[j][l]==1)
continue;
dp[i%3][j][k]=max(dp[(i-1)%3][k][l]+sum[j],dp[i%3][j][k]);
maxn=max(maxn,dp[i%3][j][k]);
}
}
}
}
cout<<maxn;
}
int main()
{
init();
dfs();
}