import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        //値を取得
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int b = 1;  //整数
        int p = 2;  //掛ける回数
        
        //Xが1の場合、条件に合致するのは1のみなのでここで終了
        if (b == X){
            System.out.println(1);
            return;
        }
        
        int max = 4;    //1の次に小さいべき乗数
        for (b = 2; b <= X; ++b){
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        }
        
        //出力
        System.out.println(max);
    }
} import java.util.*; util.* java public class Main {
    public static void main(String[] args) throws Exception {
        //値を取得
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int b = 1;  //整数
        int p = 2;  //掛ける回数
        
        //Xが1の場合、条件に合致するのは1のみなのでここで終了
        if (b == X){
            System.out.println(1);
            return;
        }
        
        int max = 4;    //1の次に小さいべき乗数
        for (b = 2; b <= X; ++b){
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        }
        
        //出力
        System.out.println(max);
    }
} Main public static void main(String[] args) throws Exception {
        //値を取得
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int b = 1;  //整数
        int p = 2;  //掛ける回数
        
        //Xが1の場合、条件に合致するのは1のみなのでここで終了
        if (b == X){
            System.out.println(1);
            return;
        }
        
        int max = 4;    //1の次に小さいべき乗数
        for (b = 2; b <= X; ++b){
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        }
        
        //出力
        System.out.println(max);
    } main {
        //値を取得
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int b = 1;  //整数
        int p = 2;  //掛ける回数
        
        //Xが1の場合、条件に合致するのは1のみなのでここで終了
        if (b == X){
            System.out.println(1);
            return;
        }
        
        int max = 4;    //1の次に小さいべき乗数
        for (b = 2; b <= X; ++b){
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        }
        
        //出力
        System.out.println(max);
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int X = sc.nextInt(); X sc.nextInt() sc.nextInt sc int b = 1; b 1 int p = 2; p 2 if (b == X){
            System.out.println(1);
            return;
        } b == X b X {
            System.out.println(1);
            return;
        } System.out.println(1) System.out.println System.out System System.out 1 return; int max = 4; max 4 for (b = 2; b <= X; ++b){
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        } b = 2; b = 2 b 2 b <= X b X ++b ++b b {
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        } {
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        } for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            } p = 2; p = 2 p 2 p <= X p X ++p ++p p {
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            } {
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            } int expo = (int) Math.pow(b,p); expo (int) Math.pow(b,p) Math.pow Math b p if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                } expo > X expo X {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                } break; max = Math.max(expo, max) max Math.max(expo, max) Math.max Math expo max System.out.println(max) System.out.println System.out System System.out max String[] args args public class Main {
    public static void main(String[] args) throws Exception {
        //値を取得
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int b = 1;  //整数
        int p = 2;  //掛ける回数
        
        //Xが1の場合、条件に合致するのは1のみなのでここで終了
        if (b == X){
            System.out.println(1);
            return;
        }
        
        int max = 4;    //1の次に小さいべき乗数
        for (b = 2; b <= X; ++b){
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        }
        
        //出力
        System.out.println(max);
    }
} public class Main {
    public static void main(String[] args) throws Exception {
        //値を取得
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int b = 1;  //整数
        int p = 2;  //掛ける回数
        
        //Xが1の場合、条件に合致するのは1のみなのでここで終了
        if (b == X){
            System.out.println(1);
            return;
        }
        
        int max = 4;    //1の次に小さいべき乗数
        for (b = 2; b <= X; ++b){
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        }
        
        //出力
        System.out.println(max);
    }
} Main
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        //値を取得
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int b = 1;  //整数
        int p = 2;  //掛ける回数
        
        //Xが1の場合、条件に合致するのは1のみなのでここで終了
        if (b == X){
            System.out.println(1);
            return;
        }
        
        int max = 4;    //1の次に小さいべき乗数
        for (b = 2; b <= X; ++b){
            for (p = 2; p <= X; ++p){
                int expo = (int) Math.pow(b,p);   //べき乗数
                if(expo > X) {  //べき乗数の値がXを超えたらループを抜ける
                    break;
                }
                max = Math.max(expo, max);	//求めたべき乗数と4のうち、大きい方を代入
            }
        }
        
        //出力
        System.out.println(max);
    }
}