#include <iostream>
#include <algorithm>
#include <queue>
#define maxN 100000
#define maxM 100000

using namespace std ;
struct Igeny{
   int b , az ;
   Igeny(int x , int y) {b = x; az = y;}//konstruktor
   bool operator <( const Igeny&) const ;
};
bool Igeny:: operator < ( const Igeny& jobb ) const {
   return b > jobb.b;
}
vector<Igeny> E[maxM];
//E[a] = {(b,az) : (a,b,az) bemenet}
int Ki[maxM];
//az x helyet a Ki[x] igény kapja
int main () {
   int n,m,a,b,hova;
//beolvasás
   cin>>m>>n;
   for (int i=0; i<n; i++){
      cin>>a>>b;
      E[a].push_back(Igeny(b,i+1));
   }
   priority_queue <Igeny> H;
   int mego=0;
   for(int x=1;x<=m;x++){
      for(Igeny e:E[x])
         H.push(e);
      if (H.size()>0){
         Ki[x]=H.top().az;
         H.pop();
         mego++;
      }
      while (H.size()>0 && H.top().b==x)
         H.pop ( ) ;
   }
//kiíratás
   cout<<mego<<endl;
   for (int x=1; x<=m; x++)
      if(Ki[x]>0)
         cout<<Ki[x]<<" "<<x<<endl;

   return 0;
}
