A number is called almost prime if it has exactly two distinct prime divisors. For example, numbers 6, 18, 24 are almost prime, while 4, 8, 9, 42 are not. Find the amount of almost prime numbers which are between 1 and n, inclusive.

Input

Input contains one integer number n (1 ≤ n ≤ 3000).

Output

Output the amount of almost prime numbers between 1 and n, inclusive.

Examples

Input

10


Output

2


Input

21


Output

8
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;


public class NewClass {

    static class FastScanner{
        BufferedReader s;
        StringTokenizer st;
        
        public FastScanner(){
            st = new StringTokenizer("");
            s = new BufferedReader(new InputStreamReader(System.in));
        }
        
        public FastScanner(File f) throws FileNotFoundException{
            st = new StringTokenizer("");
            s = new BufferedReader (new FileReader(f));
        }
        
        public int nextInt() throws IOException{
            if(st.hasMoreTokens())
                return Integer.parseInt(st.nextToken());
            else{
                st = new StringTokenizer(s.readLine());
                return nextInt();
            }
        }
        
      public double nextDouble() throws IOException{
            if(st.hasMoreTokens())
                return Double.parseDouble(st.nextToken());
            else{
                st = new StringTokenizer(s.readLine());
                return nextDouble();
            }
        }
      
        public long nextLong() throws IOException{
            if(st.hasMoreTokens())
                return Long.parseLong(st.nextToken());
            else{
                st = new StringTokenizer(s.readLine());
                return nextLong();
            }
        }
        
        public String nextString() throws IOException{
            if(st.hasMoreTokens())
                return st.nextToken();
            else{
                st = new StringTokenizer(s.readLine());
                return nextString();
            }
            
        }
        public String readLine() throws IOException{
            return s.readLine();
        }
        
        public void close() throws IOException{
            s.close();
        }
        
    }
      private static FastScanner s = new FastScanner();   
      private static PrintWriter ww = new PrintWriter(new OutputStreamWriter(System.out));
     
     
     public static void main(String[] args) throws IOException 
     {
        int n = s.nextInt();int countt=0;int a[]= new int[700];int count=0;
        if(n<=10)
        {
           if(n==6 ||(n>6 && n<10))
           ww.println(1);
           else if(n==10)
            ww.println(2);
           else
           ww.println(0);
               
        }
        else
        {
            for(int i = 2;i<=3000;i++)
            {
               if(isprime(i))
               {a[count]=i;count++;}   
               if(i>n)break;
            }
            for(int i=12;i<=n;i++)
            {
                if(isalmostprime(i,a))
                { countt++;}
            
            }
                 ww.println(" "+(countt+2));
        }
         
         s.close();
         ww.close();
     }
     public static int gcd(int a, int b){
        return b == 0 ? a : gcd(b,a%b);
    }

   public static  boolean isalmostprime(int x,int a[]){
      int nod=0;int count=0;int limit=x;
    
      while(a[count]<=limit)
      {   
          if(a[count]!=0)
          {     
            if(x%a[count]==0)
           { nod++;x=x/a[count];}
            count++;
           if(nod==3)break;
          }
          else
           break;   
      }
        if(nod==2)
        return true;
        else
         return false;  
    }
     public static boolean isprime(int n)
     { int count=0;
         for(int i=1;i<=n;i++)
         {
             if(n%i==0)
             count++;   
         }
         if(count==2)
           return true;
         else
          return false;   
     }

}
/*zabardast swappimng of sorting
/*
    for(int h=0;h<n;h++)
        {  int temp,temp1,temp2;
             for(int y=h+1;y<n;y++)
           {
             if(a[y][2]>=a[h][2])
             {
              
             temp=a[y][2];                 //////sorting
             a[y][2]=a[h][2]; 
              a[h][2]=temp;
              temp1=a[y][0];
              a[y][0]=a[h][0];
              a[h][0]=temp1;
              temp2=a[y][1];
              a[y][1]=a[h][1];
              a[h][1]=temp2;
           
             }
           }  
        }
*/