#include <iostream>
#include <iomanip>
#include <utility>
#include <cmath>
#include <random>
#include <vector>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;

#define rep(i,n) for(int i = 0; i<n; ++i)
#define REP(i,n) for(int i = 1; i<=n; ++i)
#define all(x) begin(x),end(x)
#define show(obj) for(auto x:obj)cout<<x<<' ';cout<<endl;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<ll,ll> lp;
typedef pair<double, double> FP;
const int inf = 1001001000;
const ll INF = 1LL<<60;
const int MOD = (int)1e9 + 7;

ll x, y;

map<ll, ll> costs;
ll A,D;

ll solve(ll N){
	if(N == 0)return abs(x);
        if(N == x)return 0;
	if(costs.count(N) != 0)return costs[N];
	ll res = INF;
	if(N < INF/D)res = abs(N-x)*D;

	//div2
	{
		ll to = N/2*2;
		ll tou = to + 2;
		res = min(res, solve(to/2)+ A + abs(N-to)*D);
		if(tou/2 < N)res = min(res, solve(tou/2) + A + abs(N-tou)*D);
	}

	return costs[N] = res;
}

int main(){
    cin >> x >> y;
    if(x >= y){
        cout << x-y << endl;
        return 0;
    }
    A = 1; D = 1;
    cout << solve(y) << endl;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
#define ff                first
#define brn                "\n"
#define ss                second
#define mk                make_pair
#define int               long long
#define pb                push_back
#define pf                push_front
#define ps(x,y)           fixed<<setprecision(y)<<x
#define w(x)              int x; cin>>x; while(x--)
#define FOR(i,a,b)        for(int i=(a);i<(b);i++)
#define ROF(i,a,b)        for(int i=(a);i>=(b);i--)
#define so(a,n)           sort(a,a+n)
#define rso(a,n)          sort(a,a+n),reverse(a,a+n)
#define all(v)            (v).begin(),(v).end()
#define ps(x,y)           fixed<<setprecision(y)<<x
#define sz                size();
#define p_sieve           10000007
const int                 maxn = 1e3 + 5;
const int                 modulo = 1000000007;
#define mod               1000000009;
const double              pi = 3.14159;
#define INF               1000001000
#define imx                9999999999999999
#define imi               -9999999999999999

//check n==1 and base cases//
//********************************---------always check array boundness-----------****************
// factorial ncr
// int printNcR(int n, int r)
// {
// 	if (n < r)return 0;
// 	long long p = 1, k = 1;
// 	if (n - r < r)
// 		r = n - r;
// 	if (r != 0) {
// 		while (r) {
// 			p *= n;
// 			k *= r;
// 			long long m = __gcd(p, k);
// 			p /= m;
// 			k /= m;

// 			n--;
// 			r--;
// 		}
// 	}
// 	else p = 1;
// 	return p;
// }

// int power(int x, unsigned int y)
// {
// 	int res = 1;
// 	//x = x % modulo;
// 	if (x == 0) return 0;
// 	while (y > 0)
// 	{
// 		if (y & 1) res = (res * x);
// 		y = y >> 1;
// 		x = (x * x);
// 	}

// 	return res;
// }
// const int N = 1e4 + 5;
// int dp[N];
// bool prime[N];
// std::vector<int> v;


// bool prime[N];
// void precompute()
// {
// 	memset(prime , 1, sizeof(prime));
// 	prime[0] = 0;
// 	prime[1] = 0;
// 	for (int i = 2; i * i <= N; i++)
// 	{
// 		if (prime[i] == 1)
// 			for (int j = i * i; j <= N; j += i )prime[j] = 0;
// 	}
// }

// generating subsets..
// for ( int i = 0 ; i < ( 1 << m ) ; ++ i )
// {
// 	for ( int j = 0; j < m ; ++ j )
// 	{
// 		if ( ( i & ( 1 << j ) ) != 0)
// 		{

// 		}
// 	}
// }
// int msb(unsigned a) {
// 	return __lg(a ^ (a & (a - 1)));
// }
// int mceil(int a, int b)
// {
// 	if (a % b == 0)return a / b;
// 	else return a / b + 1;
// }
const int N = 2e5 + 5;
std::vector<int> v[N];
void solve()
{
	int n; cin >> n;
	int mini = 1e18;
	int ok = -1;
	FOR(i, 0, n)
	{
		int x, y, z; cin >> x >> y >> z;
		z -= x;
		if (z > 0)mini = min(mini, y), ok = 1;
	}
	if (ok == 1)cout << mini;
	else cout << "-1";
}
int32_t main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	//precompute();
	//w(t)
	solve();
}