#include <iostream>
using namespace std;
char g[1005][15];
int pw[1005];
int ndp[1<<11],dp[1<<11],pre[1<<11];
int n,m;
int getmin(int ml)
{
return pre[ml];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
for(int i=0;i<(1<<10);i++)
{
pre[i]=__builtin_popcount(i);
}
for(int m1=0;m1<(1<<10);m1++)
{
for(int i=0;i<10;i++)
{
if((m1>>i)&1)pre[m1]=min(pre[m1],pre[m1^(1<<i)]+1); // remove column
for(int j=i;j<10;j++)
{
if((m1>>j)&1)
{
pre[m1]=min(pre[m1],pre[m1-(1<<(j+1))+(1<<i)]+1);
}
else
{
break;
}
}
}
}
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>g[i][j];
if(g[i][j]=='#')pw[i]+=(1<<j),g[i][j]='1';
else g[i][j]='0';
}
}
for(int i=0;i<(1<<m);i++)ndp[i]=dp[i]=m*n;
dp[0]=0;
for(int i=0;i<n;i++)
{
for(int m1=(1<<m)-1;m1>=0;m1--)
{
int c=__builtin_popcount(m1^(m1&pw[i])); // # bits on only in m1
ndp[pw[i]]=min(ndp[pw[i]],c+dp[m1]);
ndp[pw[i]&m1]=min(ndp[pw[i]&m1],dp[m1]+c+pre[pw[i]^(m1&pw[i])]);
ndp[0]=min(ndp[0],dp[m1]+c+pre[pw[i]^(m1&pw[i])]+__builtin_popcount(m1&pw[i]));
}
for(int m1=(1<<m)-1;m1>=0;m1--)
{
dp[m1]=ndp[m1];
ndp[m1]=n*m;
}
}
cout<<dp[0]<<endl;
}