#include <stdio.h>
#include <assert.h>
#include <math.h>

int alloca(int N) {
    // Mettete qui il codice della soluzione
    int esponente = 10;
    int i,j;
    int trovato = 0;
    int risultato;
    int risultati[100];
    int indice = 0;
    if (N >= 10000) {
        for (i = 100; i >= 2; i--) {
            for(j = esponente;j >= 2;j--) {
                printf("%ld\n", (long int)pow(i,j));
                if (((long int)pow(i,j)) <= N ) {
                    risultati[indice] = pow(i,j);
                    indice++;
                    printf("TROVATO");
                    
                    break;
                    
                }
            }
            
        }
    }
    else if (N >= 1000 && N <= 9999) {
        for (i = 50; i >= 0; i--) {
            for(j = esponente;j >= 2;j--) {
                printf("%ld\n", (long int)pow(i,j));
                if (((long  int)pow(i,j)) <= N ) {
                    risultati[indice] = pow(i,j);
                    indice++;
                    printf("TROVATO");
                    
                    break;
                    
                }
            }
            
        }
        
    }
    else {
        for (i = 25; i >= 2; i--) {
            for(j = esponente;j >= 2;j--) {
                printf("%ld\n", (long int)pow(i,j));
                if ((( long  int)pow(i,j)) <= N ) {
                    risultati[indice] = pow(i,j);
                    indice++;
                    printf("TROVATO");
                    
                    
                    break;
                    
                }
            }
        }
        
    }
    risultato = risultati[0];
    for (i = 1; i<=indice-1; i++) {
        if (risultati[i] > risultato) risultato = risultati[i];
    }

       return risultato;
}


int main() {
    FILE *fr, *fw;
    int N, i;

    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(1 == fscanf(fr, "%d", &N));
    fprintf(fw, "%d\n", alloca(N));
    fclose(fr);
    fclose(fw);
    return 0;
}
