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.* ; 

public class MyCode{
   
   public static void main(String arg[]){
      Scanner sc = new Scanner(System.in) ; 
      int n = sc.nextInt() ; 
      ArrayList <Pair> p = new ArrayList <Pair>() ; 
      
      for(int i =  0 ; i < n ; i++){
         p.add(new Pair(sc.nextInt(), sc.nextInt())) ;
      }
      
      Collections.sort(p, (a, b) -> a.ft - b.ft) ; 
      int maxActivities[] = new int[n] ; 
      maxActivities[0] = 1 ; 
       int finalEndTime = p.get(0).ft ;  
      for(int i = 1 ; i < n; i++)
      {  
      if(p.get(i).st > finalEndTime)
      {
        maxActivities[i]  = maxActivities[i - 1] + 1 ;
        finalEndTime = p.get(i).ft  ;
      }
      else
          maxActivities[i] = maxActivities[i - 1] ;
      }


      int max = Integer.MIN_VALUE ;
      for(int i = 0 ; i < n; i++){
         max = Math.max(max, maxActivities[i]);
      }
      System.out.println(max);
   }
   
   static int findLatestNonConflict(ArrayList<Pair> p, int end, int startTime){
      int ans = -1 ; 
      
      int start = 0 ; 
      end = end - 1 ; 
      
      while(start <= end){
         int mid = (start + end) / 2  ;
         
         if(p.get(mid).ft < startTime)
            {
               //take decision
                if(p.get(mid + 1).ft >= startTime){
                   return mid  ;
                }else{
                   ans = mid ;
                   start = mid + 1 ; 
                }
            }else{
               end = mid - 1 ; 
            }
      }
      return ans ; 
   }
   
   static class Pair{
      int st ; 
      int ft ; 
      Pair(int s, int f){
         this.st = s ; 
         this.ft = f ; 
      }
   }
}