#include<bits/stdc++.h>
using namespace std;
const int N=55;
char g[N][N];
int h[N*N],ne[N*N],e[N*N],idx;
int t1,t2;
int match[N*N];
bool st[N*N];
int num1[N][N],num2[N][N];
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
bool dfs(int u){
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
if(!st[j]){
st[j]=1;
if((match[j]==-1)||dfs(match[j])){
match[j]=u;
return true;
}
}
}
return false;
}
int main(){
memset(h,-1,sizeof h);
int n,m;scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%s",g[i]+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(g[i][j]!='*') continue;
if(g[i][j]==g[i][j-1]){
num1[i][j]=num1[i][j-1];
}
else{
num1[i][j]=t1++;
}
if(g[i][j]==g[i-1][j]){
num2[i][j]=num2[i-1][j];
}
else{
num2[i][j]=t2++;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
add(num1[i][j],n*m+num2[i][j]);
}
}
int ans=0;
memset(match,-1,sizeof match);
for(int i=0;i<t1;i++){
memset(st,false,sizeof st);
if(dfs(i)) ans++;
}
printf("%d\n",ans);
return 0;
}