#include<iostream>
#include<memory.h>
using namespace std;
string add(string x,string y){
int lena=x.size();
int lenb=y.size();
int lenc=max(lena,lenb);
short a[lena+2]={0},b[lena+2]={0},c[lenc+2]={0};
int k=1;
for(int i=lena-1;i>=0;i--)a[k++]=x[i]-'0';
k=1;
for(int i=lenb-1;i>=0;i--)b[k++]=y[i]-'0';
for(int i=1;i<=lenc;i++){
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/10;
c[i]%=10;
}
if(c[lenc+1])lenc++;
string z="";
for(int i=lenc;i>=1;i--)z=z+char(c[i]+'0');
return z;
}
string chen(string x,string y){
int lena=x.size();
int lenb=y.size();
int lenc=lena+lenb;
short a[lena+2]={0},b[lenb+2]={0},c[lenc+2]={0};
int k=1;
for(int i=lena-1;i>=0;i--)a[k++]=x[i]-'0';
k=1;
for(int i=lenb-1;i>=0;i--)b[k++]=y[i]-'0';
for(int i=1;i<=lena;i++){
for(int j=1;j<=lenb;j++){
c[i+j-1]+=a[i]*b[j];
}
}
for(int i=1;i<=lenc;i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(!c[lenc])lenc--;
string z="";
for(int i=max(1,lenc);i>=1;i--)z=z+char(c[i]+'0');
return z;
}
string jian(string x,string y){
int lena=x.size();
int lenb=y.size();
int lenc=max(lena,lenb);
short a[lena+2]={0},b[lenb+2]={0},c[lenc+2]={0};
int k=1;
for(int i=lena-1;i>=0;i--)a[k++]=x[i]-'0';
k=1;
for(int i=lenb-1;i>=0;i--)b[k++]=y[i]-'0';
for(int i=1;i<=lenc;i++){
c[i]+=a[i]-b[i];
if(c[i]<0){
c[i+1]--;
c[i]=10+c[i];
}
}
while(!c[lenc])lenc--;
string z="";
for(int i=lenc;i>=1;i--)z=z+char(c[i]+'0');
return z;
}
int szleftbig(int a[],int b[],int lena,int lenb){
if(lena>lenb){
return 1;
}else if(lenb>lena){
return 0;
}
for(int i=lena;i>=1;i--){
if(a[i]>b[i]){
return 1;
}else if(a[i]<b[i]){
return 0;
}
}
return -1;
}
bool leftb(string a,string b){
if(a.size()>b.size())return true;
else if(a.size()<b.size()) return false;
for(int i=0;i<int(a.size());i++){
if(a[i]>b[i]){
return true;
}else if(a[i]<b[i]){
return false;
}
}
return false;
}
bool leftbig(string a,string b){
if(a.size()>b.size())return true;
else if(a.size()<b.size()) return false;
for(int i=0;i<int(a.size());i++){
if(a[i]>b[i]){
return true;
}else if(a[i]<b[i]){
return false;
}
}
return true;
}
void numcpy(int p[],int q[],int tank,int lenq){
for(int i=1;i<=lenq;i++)q[tank+i-1]=p[i];
}
string szstl(int a[],int lena){
while(!a[lena])lena--;
string x="";
for(int i=max(lena,1);i>=1;i--)x=x+char(a[i]+'0');
return x;
}
string chugcg(string x,string y){
int lena=x.size();
int lenb=y.size();
int lenc=lena-lenb+1;
int a[lena+2]={0},b[lenb+2]={0},c[lenc+2]={0};
int tmp[lenb+lenc+1]={0};
int k=1;
for(int i=lena-1;i>=0;i--)a[k++]=x[i]-'0';
k=1;
for(int i=lenb-1;i>=0;i--)b[k++]=y[i]-'0';
for(int i=lenc;i>=1;i--){
memset(tmp,0,sizeof tmp);
numcpy(b,tmp,i,lenb);
while(szleftbig(a,tmp,lena,lenb+i-1)){
c[i]++;
if(szleftbig(a,tmp,lena,lenb+i-1)==-1){
goto kkksc03;
}
for(int j=1;j<=lena;j++){
a[j]=a[j]-tmp[j];
if(a[j]<0){
a[j]+=10;
a[j+1]--;
}
}
while(!a[lena])lena--;
}
}
kkksc03:;
return szstl(c,lenc);
}
string chugcd(string x,int y){
int lena=x.size();
int lencr=lena;
int t=0;
short a[lena+2]={0};
short c[lencr+2]={0};
for(int i=lena-1;i>=0;i--)a[i+1]=x[i]-'0';
for(int i=1;i<=lena;i++){
t=t*10+a[i];
c[i]=t/y;
t%=y;
}
int lencl=1;
while(!c[lencl])lencl++;
string z="";
if(lencl>lencr){
z="0";
}else{
for(int i=lencl;i<=lencr;i++)z=z+char(c[i]+'0');
}
return z;
}
string ksm(string a,int b){
string sum="1";
while(b){
if(b&1){
sum=chen(sum,a);
}
a=chen(a,a);
b>>=1;
}
return sum;
}
int main(){
int m;
string n;
cin>>m>>n;
string l="0",r="1";
while(leftb(n,ksm(r,m))){
l=r;
r=chen(r,"2");
}
while(leftb(r,add(l,"1"))){
string mid=chugcd(add(r,l),2);
if(leftb(ksm(mid,m),n))r=mid;
else l=mid;
}
if(leftbig(n,ksm(r,m))){
cout<<r;
}else{
cout<<l;
}
return 0;
}