#include <iostream>
using namespace std;
int dp[1005][1<<10], Mn2[1<<10], Mn[1<<10], n, m;
string s[1005];
int cost(int i, int j){
int ans = 0;
for (int k=0, lst = 0;k<m;k++){
if (s[i][k] == '.' and (j & (1<<k)))
return 100000;
if (s[i][k] == '#' and (j & (1<<k)) == 0)
ans += !lst, lst = 1;
else
lst = 0;
}
return ans;
}
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++)
cin>>s[i];
dp[0][0] = -1e9;
for (int i=1;i<=n;i++){
for (int j=(1<<m);j + 1;j--){
Mn[j] = dp[i-1][j];
for (int k=0;k<m;k++){
if (((1<<k) & j) == 0)
Mn[j] = min(Mn[j], Mn[(1<<k) ^ j]);
}
}
for (int j=0;j<(1<<m);j++){
Mn2[j] = Mn[j];
for (int k=0;k<m;k++){
if ((1<<k) & j)
Mn2[j] = min(Mn2[j], Mn2[(1<<k) ^ j] + 1);
}
}
for (int j=0;j<(1<<m);j++)
dp[i][j] = Mn2[j] + cost(i, j);
}
int inf = 1e9, ans = inf;
for (int i=0;i<(1<<m);i++)
ans = min(ans, dp[n][i] + inf);
cout<<ans<<'\n';
}