program main
  implicit none
  integer(8) :: n, s, sqrt_n, b, p
  read(*, *) n
  read(*, *) s

  if (n < s) then
    write(*, "(i0)") -1
    stop 0
  else if (n == s) then
    write(*, "(i0)") n + 1
    stop 0
  end if

  sqrt_n = integer_sqrt(n)

  do b = 2, sqrt_n
    if (f(b, n) == s) then
      write(*, "(i0)") b
      stop 0
    end if
  end do

  do p = 1, sqrt_n
    b = (n - s) / p + 1
    if (f(b, n) == s) then
      write(*, "(i0)") b
      stop 0
    end if
  end do

  write(*, "(i0)") -1

  contains

  function integer_sqrt(n)
    implicit none
    integer(8), intent(in) :: n
    integer(8) :: integer_sqrt, i
    if (n < 0) stop 101
    do i = 0, n + 1
      if (i ** 2 > n) then
        integer_sqrt = i - 1
        exit
      end if
    end do
  end function integer_sqrt

  recursive function f(b, n) result(res)
    implicit none
    integer(8), intent(in) :: b, n
    integer(8) :: res
    if (n < b) then
      res = n
    else
      res = f(b, n / b) + mod(n, b)
    end if
  end function f
end program main
