import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int X = sc.nextInt();
		sc.close();
		
		int limit = (int) Math.floor(Math.sqrt(X));
		int ans = 1;
		int max = 1;
		
		for(int i=1; i<=limit; i++) {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		}
		System.out.println(ans);

	}

} import java.util.Scanner; Scanner java.util public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int X = sc.nextInt();
		sc.close();
		
		int limit = (int) Math.floor(Math.sqrt(X));
		int ans = 1;
		int max = 1;
		
		for(int i=1; i<=limit; i++) {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		}
		System.out.println(ans);

	}

} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int X = sc.nextInt();
		sc.close();
		
		int limit = (int) Math.floor(Math.sqrt(X));
		int ans = 1;
		int max = 1;
		
		for(int i=1; i<=limit; i++) {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		}
		System.out.println(ans);

	} main {
		Scanner sc = new Scanner(System.in);
		int X = sc.nextInt();
		sc.close();
		
		int limit = (int) Math.floor(Math.sqrt(X));
		int ans = 1;
		int max = 1;
		
		for(int i=1; i<=limit; i++) {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		}
		System.out.println(ans);

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int X = sc.nextInt(); X sc.nextInt() sc.nextInt sc sc.close() sc.close sc int limit = (int) Math.floor(Math.sqrt(X)); limit (int) Math.floor(Math.sqrt(X)) Math.floor Math Math.sqrt(X) Math.sqrt Math X int ans = 1; ans 1 int max = 1; max 1 for(int i=1; i<=limit; i++) {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		} int i=1; int i=1; i 1 i<=limit i limit i++ i++ i {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		} {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		} for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			} int j=2; int j=2; j 2 j<1000 j 1000 j++ j++ j {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			} {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			} max = (int)Math.pow(i, j) max (int)Math.pow(i, j) Math.pow Math i j if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				} max <= X max X {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				} if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					} ans < max ans max {
						ans = max;
					} ans = max ans max {
						ans += 0;
					} ans += 0 ans 0 System.out.println(ans) System.out.println System.out System System.out ans String[] args args public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int X = sc.nextInt();
		sc.close();
		
		int limit = (int) Math.floor(Math.sqrt(X));
		int ans = 1;
		int max = 1;
		
		for(int i=1; i<=limit; i++) {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		}
		System.out.println(ans);

	}

} public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int X = sc.nextInt();
		sc.close();
		
		int limit = (int) Math.floor(Math.sqrt(X));
		int ans = 1;
		int max = 1;
		
		for(int i=1; i<=limit; i++) {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		}
		System.out.println(ans);

	}

} Main
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int X = sc.nextInt();
		sc.close();
		
		int limit = (int) Math.floor(Math.sqrt(X));
		int ans = 1;
		int max = 1;
		
		for(int i=1; i<=limit; i++) {
			for(int j=2; j<1000; j++) {
				max = (int)Math.pow(i, j);
				if(max <= X) {
					if(ans < max) {
						ans = max;
					}else {
						ans += 0;
					}
				}
			}
		}
		System.out.println(ans);

	}

}
