#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

const int MAX = 30005;
const int BAZA = 10;

class bignum {
      public:
      int br[MAX];
      int l;
      
      bignum() {
             memset(br, 0, sizeof(br));  
             l = 0;  
      }
      
      void trim(void) {
             for(int i = 0; i < MAX; ++i) {                     
                     br[i + 1] += br[i] / BAZA;
                     br[i] %= BAZA;
                     if (br[i] != 0) l = i + 1;                       
             }        
      }
      
      friend bignum operator + (const bignum &a, const bignum &b) {
             bignum rez;
             int size = max(a.l, b.l);
             for(int i = 0; i < size; ++i) 
                     rez.br[i] = a.br[i] + b.br[i];
             rez.trim();
             return rez;
      }
      
      friend bignum operator * (const bignum &a, const bignum &b) {
             bignum rez;
             rez.l = a.l + b.l - 1;
             for(int i = 0; i < a.l; ++i)
                     for(int j = 0; j < b.l; ++j)
                             rez.br[i + j] += a.br[i] * b.br[j];
             rez.trim();
             return rez;
      }
      
      friend bool operator < (const bignum &a, const bignum &b) {
             if (a.l < b.l) return true;
             if (b.l < a.l) return false;
             for(int i = a.l - 1; i >= 0; --i) {
                     if (b.br[i] < a.br[i]) return false;     
                     if (a.br[i] < b.br[i]) return true; 
             }               
             return false;
      }
      
      friend bool operator == (const bignum &a, const bignum &b) {
             if (a.l != b.l) return false;
             for(int i = 0; i < a.l; ++i)
                     if (a.br[i] != b.br[i]) return false;                                  
             return true;
      }

};

//dijeli sa 2
bignum podijeli2(bignum a) {
       bignum rez;
       int i = a.l - 1;
       int in = -1;
       while(a.br[0] != -1) {
                   rez.br[++in] = a.br[i] / 2;
                   if (i != 0) a.br[i - 1] += ((a.br[i] % 2) * BAZA);
                   a.br[i] = -1;
                   --i;
       } 
       reverse(rez.br, rez.br + a.l);
       rez.trim();
       return rez;
}

char buff[30005];
bignum x, l, r, sol, sol2;
int y;
 
int main(void) {    
    scanf("%s", buff);
    
    x.l = strlen(buff);
    
	for(int i = 0; i < x.l; ++i) 
            x.br[x.l - 1 - i] = buff[i] - '0';

	scanf("%d", &y);
	
	if (y == 1) {
       for(int i = x.l - 1; i >= 0; --i) printf("%d", x.br[i]);
       printf("\n");
          
       return 0;   
    }

    l.br[0] = 0; l.l = 1;
    r = x;
    
    while (l < r) {
          sol = podijeli2(l + r);
		  
		  sol2.br[0] = 1;
		  sol2.l = 1;

		  for(int i = 0; i < y; ++i) sol2 = sol2 * sol;
          
		  if (sol2 == x) break;
          if (sol2 < x) l = sol; else r = sol;
    }
    
    for(int i = sol.l - 1; i >= 0; --i) printf("%d", sol.br[i]);
    printf("\n");
    
	//system("pause");
    return 0;
}
