/*
* Problem :: 1052 / 물병
*
* Kind :: Brute Force
*
* Insight
* - 같은 양의 물이 들어있는 물병 두 개를 고른다
* 그 다음에 한 개의 물병에 다른 한 쪽에 있는 물을 모두 부은다
* 1+1 = 2, 2+2 = 4, 4+4 = 8 ...
* + 이진수...? (2048 Game!)
* # 물병의 개수가 N 을 이진수로 표현했을 때 1의 개수이다!
*
* - (N, K) = (x, y) 라고 하면
* 제일 시간이 오래걸리는 경우가
* (2^x + 1, 1) 과 같은 꼴이다
* + 2^23 < 10^7 < 2^24 이니까,
* (10^7, 1) 인 경우나 (2^22+1, 1) 인 경우가 제일 시간이 오래걸릴것 같은데...
* 2^24 - 10^7 = 6777216, 2^22 = 4194304 이니까
* 물병을 하나씩 더하면서 가능한지 다 따져보아도 괜찮을 것 같다
*/
//
// BOJ
// ver.C++
//
// Created by GGlifer
//
// Open Source
#include <iostream>
#include <algorithm>
using namespace std;
#define endl '\n'
// Set up : Global Variables
/* None */
// Set up : Functions Declaration
int getNumBottles(int v);
int main()
{
// Set up : I/O
ios::sync_with_stdio(false);
cin.tie(nullptr);
// Set up : Input
int N, K;
cin >> N >> K;
// Process
/* 따져볼 범위는 그냥 max(N) 인 10e7 로 잡음 */
for (int i=0; i<=10e7; i++) {
/* i = 상점에서 산 물병의 개수 */
int v = N+i; /* 총 v 리터 */
int numBottles = getNumBottles(v); /* v 리터를 담은 물병의 개수 */
/* v 리터를 담은 물병의 개수가 K 개 이하이면 */
if (numBottles <= K) {
// Control : Output
cout << i << endl;
exit(0);
}
}
// Control : Output
/* 불가능, 그러나 불가능할 수가 없기에 아래 코드는 실행되지는 않음 */
cout << -1 << endl;
}
// Helper Functions
int getNumBottles(int v)
{
int cnt = 0;
while (v) {
if (v % 2) cnt++;
v /= 2;
} return cnt;
}