#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int N, M;
  cin >> N >> M;
  vector<pair<int, int>> P(M);
  for (int i = 0; i < M; i++) {
    cin >> P[i].first >> P[i].second;
  }
  sort(P.begin(), P.end());
  set<int> st;
  st.insert(N);
  for (int l = 0; l < M;) {
    int r = l;
    vector<int> A, B;
    for (; r < M && P[l].first == P[r].first; r++) {
      if (st.find(P[r].second + 1) != st.end() || st.find(P[r].second - 1) != st.end()) {
        A.emplace_back(P[r].second);
      } else {
        B.emplace_back(P[r].second);
      }
    }
    for (int a : A) {
      st.insert(a);
    }
    for (int b : B) {
      auto it = st.find(b);
      if (it != st.end()) st.erase(it);
    }
    l = r;
  }
  cout << st.size() << '\n';
  return 0;
}

#define rep(i, n) for(int i=0;i<(int)(n);i++)
#define ALL(v) v.begin(), v.end()
typedef long long ll;

#include <bits/stdc++.h>
using namespace std;

int main(){
  int n,m;
  cin>>n>>m;
  map<pair<int,int>,int> M;
  rep(i,m){
    int x,y;
    cin>>x>>y;
    M[{x,y}]=1;
  }
  
  map<int,int> A;
  map<pair<int,int>,int> B;
  A[n]=1;
  for(auto t:M){
    int x=t.first.first;
    int y=t.first.second;
    if(A[y]==1) B[{x-1,y}]=1;
    A[y]=0;
    if(A[y+1]==1) A[y]=1;
    else if(B[{x-1,y-1}]==1) A[y]=1;
    else if(A[y-1]==1 && M[{x,y-1}]!=1) A[y]=1;
   /* cout<<x<<" "<<y<<" ";
    rep(i,2*n+1) cout<<A[i];
    cout<<endl;*/
  }
  int cnt=0;
  for(auto t:A){
    if(t.second==1){
      cnt++;
    }
  }
  cout<<cnt<<endl;

  return 0;
}