Problem:
Score : 400 points

Problem Statement

There are N islands lining up from west to east, connected by N-1 bridges.

The i-th bridge connects the i-th island from the west and the (i+1)-th island from the west.

One day, disputes took place between some islands, and there were M requests from the inhabitants of the islands:

Request i: A dispute took place between the a_i-th island from the west and the b_i-th island from the west. Please make traveling between these islands with bridges impossible.

You decided to remove some bridges to meet all these M requests.

Find the minimum number of bridges that must be removed.

Constraints

All values in input are integers.

2 \leq N \leq 10^5

1 \leq M \leq 10^5

1 \leq a_i < b_i \leq N

All pairs (a_i, b_i) are distinct.

Input

Input is given from Standard Input in the following format:

N M
a_1 b_1
a_2 b_2
:
a_M b_M

Output

Print the minimum number of bridges that must be removed.

Sample Input 1

5 2
1 4
2 5

Sample Output 1

1

The requests can be met by removing the bridge connecting the second and third islands from the west.

Sample Input 2

9 5
1 8
2 7
3 5
4 6
7 9

Sample Output 2

2

Sample Input 3

5 10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

Sample Output 3

4

Solution in C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Linq;
using System.Collections.Generic;

public class Test
{
	public static void Main()
	{
        string[] line = Console.ReadLine().Split(' ');
        int n = int.Parse(line[0]);
        int m = int.Parse(line[1]);
        int cnt = 0;

        int[] sima = new int[n];
        string[] youbou = new string[m];

        for(int i = 0 ; i < m ; i++){
            youbou[i] = Console.ReadLine();
        }
        
        bool cut = true;
        string[] buffer = new string[2];
        int a1;
        int b1;
        int a2;
        int b2;
        for(int i = 0 ; i < m ; i++){
            cut = true;
            buffer = youbou[i].Split(' ');
            a1 = int.Parse(buffer[0]);
            b1 = int.Parse(buffer[1]);
            for(int j = i+1; j < m ; j++){
                buffer = youbou[j].Split(' ');
                a2 = int.Parse(buffer[0]);
                b2 = int.Parse(buffer[1]);

                if(a2 > a1 && a2 < b1)
                {
                    cut = false;
                }
            }
            if(cut){
                cnt++;
            }
        }
        Console.WriteLine(cnt);
    }                                                                                                                                   
}