#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
const long long mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10;
template <typename T>
void chkmax(T &x, T y) {
  x = max(x, y);
}
template <typename T>
void chkmin(T &x, T y) {
  x = min(x, y);
}
long long qpow(long long x, long long y, long long MOD) {
  long long a = 1;
  while (y) {
    if (y & 1) a = a * x % MOD;
    x = x * x % MOD;
    y >>= 1;
  }
  return a;
}
long long cal(long long x, long long y) {
  long long ans = 0;
  while (x > y) {
    ans += x % y;
    x /= y;
  }
  ans += x;
  return ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long n, s;
  cin >> n >> s;
  if (s > n) {
    cout << -1;
    return 0;
  }
  long long ans = INF;
  int q = sqrt(n);
  for (int i = int(2); i <= int(q); ++i) {
    if (cal(n, i) == s) {
      chkmin(ans, 1LL * i);
    }
  }
  long long m = n - s;
  for (int i = sqrt(m); i >= 1; --i)
    if (m % i == 0) {
      long long b = m / i + 1, y = n - b * i;
      if (y >= 0 && y < b && 1LL * i + y == s && b > q) {
        chkmin(ans, b);
      }
    }
  cout << ans;
  return 0;
}
