#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,num,p[105],pd[1050][1050],dp[1050][105][1005];
signed main(){
cin>>n>>m;
num=(1<<m)-1;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
char x;
p[i]<<=1;
cin>>x;
p[i]|=(x=='P');
}
for(int i=0;i<=num;++i){
bool ok=0;
for(int o=0;o<m-2;++o)
if((i&(1<<o))&&(i&(1<<o+1))||(i&(1<<o))&&(i&(1<<o+2))){
ok=1;
break;
}
if(ok||(i&(1<<m-2))&&(i&(1<<m-1))) continue;
for(int j=0;j<=num;++j){
if(pd[i][j]) continue;
bool ko=0;
for(int o=0;o<m-2;++o)
if((j&(1<<o))&&(j&(1<<o+1))||(j&(1<<o))&&(j&(1<<o+2))){
ko=1;
break;
}
if(ko||(i&j)||(j&(1<<m-2))&&(j&(1<<m-1))) continue;
pd[j][i]=pd[i][j]=1;
}
}
for(int i=0;i<=num;++i) if((p[1]|i)==p[1]&&pd[0][i]) ++dp[i][1][__builtin_popcount(i)];
for(int i=0;i<=num;++i){
if((p[1]|i)>p[1]||(!pd[0][i])) continue;
for(int j=0;j<=num;++j){
if((p[2]|j)>p[2]||!pd[i][j]) continue;
++dp[i][2][__builtin_popcount(i)+__builtin_popcount(j)];
}
}
for(int i=3;i<=n;++i)
for(int x=0,cx=0;x<=num;++x,cx=__builtin_popcount(x)){
if((p[i-2]|x)>p[i-2]||!pd[0][x]) continue;
for(int y=0;y<=num;++y){
if((p[i-1]|y)>p[i-1]||!pd[x][y]) continue;
for(int z=0;z<=num;++z){
if((p[i]|z)>p[i]||!pd[y][z]||!pd[x][z]) continue;
for(int cnt=__builtin_popcount(y)+__builtin_popcount(z),j=cnt+cx;j<=i*m;++j)
dp[z][i][j]+=dp[x][i-2][j-cnt];
}
}
}
for(int j=n*m;j>=0;--j)
for(int i=0;i<=num;++i)
if(dp[i][n][j]){
cout<<j;
return 0;
}
return 0;
}