#include <bits/stdc++.h>
const int MX = 2e6 + 7;
const int mod = 998244353;
const double pi = 3.1415926535897932384;
double isp = 1e-13;
using namespace std;
long long qpow(long long a, long long b, long long MOD = mod) {
  for (long long ans = 1;; a = a * a % MOD, b >>= 1) {
    if (b & 1) ans = ans * a % MOD;
    if (!b) return ans;
  }
}
long long inv(long long a, long long MOD = mod) {
  return qpow(a, MOD - 2, MOD);
}
long long exgcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1, y = 0;
    return a;
  }
  long long ret = exgcd(b, a % b, y, x);
  y -= a / b * x;
  return ret;
}
long long getInv(int a, int mod) {
  long long x, y;
  long long d = exgcd(a, mod, x, y);
  return d == 1 ? (x % mod + mod) % mod : -1;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  long long n, s;
  cin >> n >> s;
  long long m = sqrt(n);
  if (n == s) {
    cout << 1 << '\n';
    return 0;
  }
  for (int i = 2; i <= m; i++) {
    int cnt = 0;
    long long k = n;
    while (k) {
      cnt += k % i;
      k /= i;
    }
    if (cnt == s) {
      cout << i << '\n';
      return 0;
    }
  }
  for (long long k = m; k >= 1; k--) {
    if ((n - s) % k == 0 && k < (n - s) / k + 1 &&
        n - k * ((n - s) / k + 1) < (n - s) / k + 1 &&
        n - k * ((n - s) / k + 1) >= 0) {
      cout << (n - s) / k + 1 << '\n';
      return 0;
    }
  }
  cout << -1 << '\n';
  return 0;
}
