#include<iostream>
#include<string>
using namespace std;
string mult(string sa, string sb) {
int la = sa.size(), lb = sb.size();
int lc = la + lb;
int a[la], b[lb], c[lc];
string sc;
for(int i = 0; i < la; i++) a[la-i-1] = sa[i] - '0';
for(int i = 0; i < lb; i++) b[lb-i-1] = sb[i] - '0';
for(int i = 0; i < lc; i++) c[i] = 0;
for(int i = 0; i < la; i++) {
for(int j = 0; j < lb; j++) {
c[i+j] += a[i] * b[j];
if(c[i+j] > 9) {
c[i+j+1] += c[i+j]/10;
c[i+j] %= 10;
}
}
}
while(lc > 1 && c[lc-1] == 0) lc--;
for(int i = lc-1; i >= 0; i--) sc += c[i] + '0';
return sc;
}
string add(string sa, string sb) {
if (sa == "0") return sb;
if (sb == "0") return sa;
int la = sa.size(), lb = sb.size();
int lc = max(la, lb) + 1;
int a[la], b[lb], c[lc];
for (int i = 0; i < lc; i++) c[i] = 0;
for (int i = 0; i < la; i++) a[la-i-1] = sa[i] - '0';
for (int i = 0; i < lb; i++) b[lb-i-1] = sb[i] - '0';
for (int i = 0; i < lc; i++) {
if (i < la) c[i] += a[i];
if (i < lb) c[i] += b[i];
if (c[i] >= 10) {
c[i+1] += c[i] / 10;
c[i] %= 10;
}
}
string sc;
int start = lc - 1;
while (start > 0 && c[start] == 0) start--;
for (int i = start; i >= 0; i--) sc += (c[i] + '0');
return sc;
}
string sub(string sa, string sb) {
if (sa.size() < sb.size() || (sa.size() == sb.size() && sa < sb)) return "0";
int la = sa.size(), lb = sb.size();
int lc = la;
int a[la], b[la], c[la+1];
for (int i = 0; i < la; i++) a[la-i-1] = sa[i] - '0';
for (int i = 0; i < lb; i++) b[lb-i-1] = sb[i] - '0';
for (int i = lb; i < la; i++) b[i] = 0;
for (int i = 0; i <= lc; i++) c[i] = 0;
for (int i = 0; i < la; i++) {
if (a[i] < b[i]) {
a[i+1]--;
a[i] += 10;
}
c[i] = a[i] - b[i];
}
while (lc > 0 && c[lc-1] == 0) lc--;
if (lc == 0) return "0";
string sc;
for (int i = lc-1; i >= 0; i--) sc += (c[i] + '0');
return sc;
}
string div(string sa, int b) {
if(sa=="0") return "0";
int la = sa.size();
int kc=0;
int a[la],c[la];
string sc;
for(int i = 0; i < la; i++) a[i] = sa[i] - '0';
int x=0;
for(int i = 0; i < la; i++) {
c[i]=(x*10+a[i])/b;
x=(x*10+a[i])%b;
}
while(c[kc] == 0) kc++;
for(int i = kc;i<la;i++) sc += c[i] + '0';
return sc;
}
string quick_pow(string a,int b){
string ans;
ans="1";
while(b>0){
if(b%2) ans=mult(ans,a);
a=mult(a,a);
b/=2;
}
return ans;
}
bool str_cmp(string a, string b) {
if(a.size() != b.size()) {
return a.size() > b.size();
}
return a >= b;
}
string calc(string n,int b){
string left="0",right=quick_pow("10",(n.size()+b-1)/b);
string k=sub(right,left);
int cnt=0;
while(str_cmp(k,"1")){
string mid=div(add(left,right),2),ans=quick_pow(mid,b);
if(ans==n) return mid;
if(str_cmp(ans,n)) right=sub(mid,"1");
else left=add(left,"1");
cnt++;
k=sub(right,left);
}
return left;
}
int main(){
string n;
int b;
cin>>b>>n;
cout<<calc(n,b)<<endl;
return 0;
}