// #include<bits/stdc++.h>

// #include <array>
// #include <vector>
// #include <list>
// #include <forward_list>
// #include <deque>
// #include <queue>
// #include <stack>

// #include <bitset>
// #include <unordered_map>
// #include <map>
// #include <unordered_set>
// #include <set>

#include <algorithm>

// #include <string>
#include <iomanip>
#include <iostream>
// #include <sstream>

// #include <bit>
// #include <complex>
// #include <exception>
// #include <fstream>
// #include <functional>
// #include <iosfwd>
// #include <iterator>
// #include <limits>
// #include <locale>
// #include <memory>
// #include <new>
// #include <numeric>
// #include <stdexcept>
// #include <typeinfo>
// #include <utility>
// #include <valarray>
// #include <atomic>
// #include <chrono>
// #include <condition_variable>
// #include <future>
// #include <initializer_list>
// #include <mutex>
// #include <random>
// #include <ratio>
// #include <regex>
// #include <scoped_allocator>
// #include <system_error>
// #include <thread>
// #include <tuple>
// #include <typeindex>
// #include <type_traits>

// C
// #include <cassert>
// #include <cctype>
// #include <cerrno>
// #include <cfloat>
// #include <ciso646>
// #include <climits>
// #include <clocale>
// #include <cmath>
// #include <csetjmp>
// #include <csignal>
// #include <cstdarg>
// #include <cstddef>
// #include <cstdio>
// #include <cstdlib>
// #include <cstring>
// #include <ctime>
// #include <ccomplex>
// #include <cfenv>
// #include <cinttypes>
// #include <cstdbool>
// #include <cstdint>
// #include <ctgmath>
// #include <cwchar>
// #include <cwctype>

using namespace std;

using ll = long long;
#define int ll
#define endl "\n"
#define unless(cond) if(!(cond))
#define until(cond) while(!(cond))
#define rep(i,s,e) for(ll i = (s); i < (e); ++i)
#define repR(i,s,e) for(ll i = (e)-1; (s) <= i; --i)
#define repE(i,s,e) for(ll i = (s); i <= (e); ++i)
#define repER(i,s,e) for(ll i = (e); (s) <= i; --i)
#define repSubsetR(set,super) for(ll _super=super,set = _super; 0 <= set; --set)if(set &= _super, true)

#define STRINGIFY(n) #n
#define TOSTRING(n) STRINGIFY(n)
void debug(){}
template <class X, class... Xs>
void debug(X&& x, Xs&&... xs) { cerr << x; if(sizeof...(Xs)==0)return; cerr << ", "; debug(move(xs)...); }
#ifdef DEBUG
#define debug(...) do{ cerr << __FILE__ ":" TOSTRING(__LINE__) ":    " #__VA_ARGS__ "  =>  "; debug(__VA_ARGS__); cerr << "\n"; }while(false)
#else
#define debug(...)
#endif

template<typename T> bool chmin(T &a, T b){ if(a <= b)return false; a = b; return true; }
template<typename T> bool chmax(T &a, T b){ if(a >= b)return false; a = b; return true; }



void solve(){
    ll a,b,c,n;cin>>n;
    a=n;b=0;c=0;
    ll m = a+b+c;
    while(a){
        chmin(m,a+b+c);
        c += (a&1) * (1LL << b);
        a>>=1;
        ++b;
    }
    cout << m << "\n";
    exit(0);
}

signed main(){
    cin.tie(nullptr);ios_base::sync_with_stdio(false);
    cout << fixed << setprecision(15);
    solve();
    cout << "-1" << "\n";
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
#define ll long long int

int main()
{
    ll n;
    cin>>n;
    ll x = 1;
    ll mn = (1LL<<60);
    ll i=0;
    while(x<=n)
    {
       ll q = n/x;
       ll rem=n%x;
       mn=min(mn,q+rem+i);
       i++;
       x=x*2;
    }
    cout<<mn;
}