/*
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 300010
#define ll long long
map<int,int> M;
int a[maxn];
int cal(ll x)
{
int cnt=0;
while(x)
{
cnt+=(x%2);
x/=2;
}
return cnt;
}
int main()
{
ios::sync_with_stdio(false);
// cout<<((1ll<<30)-1)<<" "<<1000000000+1000*30;
ll n,p;cin>>n>>p;
int i;
for(i=1;i<=30;i++)
{
ll N=n-i*p;
int k=cal(N);
if(k>i||i>N) continue;
//當i>=30時,k一定是<=i的(i可以的表示範圍爲[i,2^i-1],N不會超過2^30-1,其實不止這些),所以第一個條件一定成立
//如果當答案==31,說明i==30不符合條件,即N<30;並且i==31時,k<=i,即N>=31;條件矛盾
//綜上i>=31一定不會構成解
cout<<i<<endl;break;
}
if(i==31) cout<<-1;
return 0;
}