/*
数据不清空，爆零两行泪。
多测不读完，爆零两行泪。
边界不特判，爆零两行泪。
贪心不证明，爆零两行泪。
D P 顺序错，爆零两行泪。
大小少等号，爆零两行泪。
变量不统一，爆零两行泪。
越界不判断，爆零两行泪。
调试不注释，爆零两行泪。
溢出不 l l，爆零两行泪。
*/
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=100,M=100;
int n,m;
char a[N+1][M+5];
int dp[N+1][M+1];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i]+1;
	dp[1][1]=a[1][1]=='#';
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(i>1||j>1){
		dp[i][j]=inf;
		if(i-1>=1)dp[i][j]=min(dp[i][j],dp[i-1][j]+(a[i-1][j]=='.'&&a[i][j]=='#'));
		if(j-1>=1)dp[i][j]=min(dp[i][j],dp[i][j-1]+(a[i][j-1]=='.'&&a[i][j]=='#'));
	}
	cout<<dp[n][m];
	return 0;
}