#include<bits/stdc++.h>
using
namespace
std;
const
int
MAX_PRIME = 100000;
const
int
MAX_RES = 2000000000l;
void
SieveOfEratosthenes(vector<
long
long
> &a)
{
bool
prime[MAX_PRIME + 1];
memset
(prime,
true
,
sizeof
(prime));
for
(
long
long
p=2; p*p<=MAX_PRIME; p++)
{
if
(prime[p] ==
true
)
{
for
(
long
long
i=p*2; i<=MAX_PRIME; i += p)
prime[i] =
false
;
}
}
for
(
long
long
p=2; p<=MAX_PRIME; p++)
if
(prime[p])
a.push_back(p);
}
long
long
countSquares(
long
long
i,
long
long
cur,
long
long
k, vector<
long
long
> &a)
{
long
long
square = a[i]*a[i];
long
long
newCur = square*cur;
if
(newCur > k)
return
0;
long
long
cnt = k/(newCur);
cnt += countSquares(i+1, cur, k, a);
cnt -= countSquares(i+1, newCur, k, a);
return
cnt;
}
long
long
squareFree(
long
long
n)
{
vector <
long
long
> a;
SieveOfEratosthenes(a);
long
long
low = 1;
long
long
high = MAX_RES;
while
(low < high)
{
long
long
mid = low + (high - low)/2;
long
long
c = mid - countSquares(0, 1, mid, a);
if
(c < n)
low = mid+1;
else
high = mid;
}
return
low;
}
int
main()
{
int
n = 10;
cout << squareFree(n) << endl;
return
0;
}