#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	ll i,j,n,m;
	scanf("%lld%lld",&n,&m);
	pair<ll,ll>p[m+1];
	for(i=0;i<m;++i)
		scanf("%lld%lld",&p[i].first,&p[i].second);
	sort(p,p+m);
	set<ll>s;
	s.insert(n);
	p[m].first=1e10;
	queue<ll>q1,q2;
	for(i=0;i<m;++i){
		if(s.find(p[i].second)!=s.end())
			q1.push(p[i].second);
		if(s.find(p[i].second+1)!=s.end()||s.find(p[i].second-1)!= s.end())
			q2.push(p[i].second);
		if(p[i].first!=p[i+1].first){
			while(q1.size()) 
				s.erase(q1.front()),q1.pop();
			while(q2.size())
				s.insert(q2.front()),q2.pop();
		}
	}
	printf("%lld",s.size());
	return 0;
}
#include<bits/stdc++.h>
#define For(a,b,c) for(int a=b;a<=c;++a)
#define Dor(a,b,c) for(int a=b;a>=c;--a)
using namespace std;
typedef long long LL;
const int N=1007;
int n,m,c,a,vH[N],vL[N];
char G[N][N];
void flyL(int);
void flyH(int u) {
	if(vH[u]) return;
	vH[u]=c;
	For(v,1,m) if(G[u][v]=='#') flyL(v);
}
void flyL(int u) {
	if(vL[u]) return;
	vL[u]=c;
	For(v,1,n) if(G[v][u]=='#') flyH(v);
}
int main() {
	scanf("%d%d",&n,&m);
	For(i,1,n) scanf("%s",G[i]+1);
	G[1][1]=G[n][1]=G[1][m]=G[n][m]='#';
	For(i,1,n) if(!vH[i]) ++c,flyH(i);
	For(i,1,n) vH[i]=0;
	For(i,1,m) vL[i]=0;
	a=c,c=0;
	For(i,1,m) if(!vL[i]) ++c,flyL(i);
	printf("%d",min(c-1,a-1));
	return 0;
}