A restaurant received n orders for the rental. Each rental order reserve the restaurant for a continuous period of time, the i-th order is characterized by two time values — the start time li and the finish time ri (li ≤ ri).

Restaurant management can accept and reject orders. What is the maximal number of orders the restaurant can accept?

No two accepted orders can intersect, i.e. they can't share even a moment of time. If one order ends in the moment other starts, they can't be accepted both.

Input

The first line contains integer number n (1 ≤ n ≤ 5·105) — number of orders. The following n lines contain integer values li and ri each (1 ≤ li ≤ ri ≤ 109).

Output

Print the maximal number of orders that can be accepted.

Examples

Input

2
7 11
4 7


Output

1


Input

5
1 2
2 3
3 4
4 5
5 6


Output

3


Input

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


Output

2
import java.util.*;
import java.io.*;
public class B597 {
public static void main(String[] args) throws IOException
{
    FS input = new FS(System.in);
    int n = input.nextInt();
    Pair[] data = new Pair[n];
    for(int i = 0; i<n; i++) data[i] = new Pair(input.nextInt(), input.nextInt());
    Arrays.sort(data);
    int end = 0, res = 0;
    for(int i = 0; i<n; i++) if(data[i].a > end)
    {
        res++;
        end = data[i].b;
    }
    System.out.println(res);
}
static class Pair implements Comparable<Pair>
{
    int a, b;
    public Pair(int aa, int  bb)
    {
        a = aa; b = bb;
    }
    @Override
    public int compareTo(Pair o) {
        // TODO Auto-generated method stub
        return b - o.b;
    }
}
static class FS
{
    BufferedReader br;
    StringTokenizer st;
    public FS(InputStream in)
    {
        br = new BufferedReader(new InputStreamReader(in));
    }
    String next() throws IOException
    {
        while(st == null || !st.hasMoreTokens()) st = new StringTokenizer(br.readLine());
        return st.nextToken();
    }
    int nextInt() throws IOException
    {
        return Integer.parseInt(next());
    }
}
}
