import std.algorithm;
import std.range;
import std.stdio;
import std.math;
import std.array;
import std.string;
import std.conv;

/// 数列の読み込み
auto readNums(T = int)() {
	return readln().chomp.split.map!(to!T).array;
}

/// 数の読み込み
auto readNum(T = int)() {
	return readNums!T.front;
}

/// 指定行数読み込み
auto readRows(size_t rows) {
	return generate(() => readln().chomp).take(rows).array;
}

void main() {
    immutable n = cast(real) readNum();
    immutable bmax = cast(int) sqrt(n);
    immutable logn = log(n);
    int maxValue = 1;
    foreach(b; 2 .. bmax + 1) {
        maxValue = max(maxValue, b ^^ cast(int)(logn / log(b)));
    }
    writefln("%s", maxValue);
}