#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template<class T> using oset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define pb push_back
#define N 100012
#define ll long long
#define int ll
#define pi pair<int , int>
#define pip pair<pair ,int>
#define mp make_pair
#define f first
#define s second
#define mod 1000000007
ll Mod(ll x, ll y, int p)
{	ll res = 1; x = x % p;
	while (y > 0)
	{	if (y & 1) res = (res * x) % p;
		y = y >> 1; x = (x * x) % p;
	} return res;
}
int* getlps(string pattern) {
	int len = pattern.length();
	int * lps = new int[len];
	lps[0] = 0;
	int i = 1 , j = 0;
	while (i < len) {
		if (pattern[i] == pattern[j]) {
			lps[i] = j + 1;
			i++;
			j++;
		}
		else {
			if (j != 0) {
				j = lps[j - 1];
			}
			else {
				lps[i] = 0;
				i++;
			}
		}
	}
	return lps;
}
class Triplet {
public:
	int x ;
	int y ;
	int gcd;
};
Triplet extendedEuclid(int a , int b) {
	if (b == 0) {Triplet ans; ans.gcd = a; ans.x = 1; ans.y = 0; return ans;}
	Triplet smallAns = extendedEuclid(b , a % b);
	Triplet ans;
	ans.gcd = smallAns.gcd;
	ans.x = smallAns.y;
	ans.y = smallAns.x - (a / b) * smallAns.y;
	return ans;
}
int mmInverse(int a , int m) {
	Triplet ans = extendedEuclid(a , m);
	return (ans.x + m) % m;
}
int fact[N];
void calfac(int n ) {
	fact[0] = 1;
	for (int i = 1 ; i <= n + 2; i++) {
		fact[i] = (((fact[i - 1] % mod) * (i % mod)) % mod + mod) % mod;
	}
}
int calc(int n , int r) {
	if (r > n)return 0;
	if (r == n)return 1;
	int ans = 1;
	ans = ((ans % mod) * (fact[n]) % mod + mod) % mod;
	ans = ((ans % mod) * (mmInverse(fact[n - r] , mod) % mod) + mod) % mod;
	ans = ((ans % mod) * (mmInverse(fact[r] , mod) % mod) + mod) % mod;
	return (ans + mod) % mod;
}

void solve(int cntt) {
	int n;
	cin >> n;
	int x = 1;
	int cnt = 1;
	cout << (n + 99) / 100 << endl;

}

signed main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);


	// preprocess();
	int t;
	t = 1;


	int l = 0;
	while (t--) {
		l++;
		solve(l);
	}
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f;
const double pi=3.1415926535897932384626;
inline ll read(){
	ll x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
ll a,b,ans;
struct node{
	ll x,y;
};
set<ll> s;
queue<node> q;
void calc(ll x,ll y){
	if(s.find(x)!=s.end()) return ;
	s.insert(x);
	q.push({x,y});
}
void bfs(){
	if(a>=b){
		ans=a-b;
		return ;
	}
	ans=b-a;
	q.push({b,0ll});
	s.insert(b);
	while(!q.empty()){
		node now=q.front();
		q.pop();
		ans=min(ans,now.y+abs(now.x-a));
		if(now.x<=a) break;
		if(now.x&1){
			calc(now.x+1,now.y+1);
			calc(now.x-1,now.y+1);
		} 
		else calc(now.x/2,now.y+1);
	}
}
int main(){
	a=read(),b=read();
	bfs();
	printf("%lld\n",ans);
	return 0;
}