#include<stdio.h>
#include<math.h>
#define MAX 2000002
unsigned long long int ziValues[MAX];
unsigned long long int prime[MAX/2];
unsigned long long int primecnt;
long int getNoQns(unsigned long long int num)
{
long int pos = 0;
while(num>1)
{
num=((num+1)/2u);
pos++;
}
return pos;
}
unsigned long long int getZiVal(unsigned long int num)
{
unsigned long long int i, n, limit, divn;
double tmp;
tmp = (double)num;
limit = (int)sqrt(tmp)+1;
for(i=0;i<primecnt && prime[i]<=limit && prime[i]<num;i++)
{
n=prime[i];
if(num%n==0)
{
divn=n;
while(divn!=num && (num/divn)%n==0)
divn*=n;
if(divn==num)
{
ziValues[num]=(num-num/n);
return ziValues[num];
}
else
{
ziValues[num]=ziValues[divn]*ziValues[num/divn];
return ziValues[num];
}
}
}
prime[primecnt] = num;
primecnt++;
ziValues[num] = (num-1);
return ziValues[num];
}
int main()
{
unsigned long long int iter, cnt, n;
scanf("%llu",&n);
cnt=0u;
for(iter=2u;iter<=n;iter++)
{
cnt+=getZiVal(iter);
}
printf("%ld\n",getNoQns(cnt));
return 0;
}