import std.stdio;
import std.range;
import std.array;
import std.functional;
import std.algorithm;
import std.conv;
import std.container;
import std.math;
import std.numeric;
import std.string;
import std.regex;
import std.typecons;


int[] 素数の集合()
{
	const nの最大値 = 1000000;
	auto 表 = new bool[nの最大値];
	表[] = true;
	表[0] = 表[1] = false;
	int[] 素数;
	foreach(int i; 0 .. nの最大値)
	{
		if(表[i])
		{
			素数 ~= i;
			for(int j = 2 * i; j < nの最大値; j += i)
				表[j] = false;
		}
	}
	return 素数;
}

void main()
{
    auto 集合 = 素数の集合();
    int m = cast(int)集合.length;
	string l;
    while(l = readln(), l.length)
    {
		int n = l.chomp.to!int;
		if(n < 2)
			writeln(0);
		else if(集合[m-1] <= n)
			writeln(m-1);
		else
		{
			for(int i; i <= m; ++i)
			{
				if(集合[i] > n)
				{
					writeln(i);
					break;
				}
			}
		}
	}
}