#include <bits/stdc++.h>
using namespace std;
#define rep(i,j,n) for(int i = j; i < (n); i++)

int main() {
  long long n;	cin >> n;
  
  int b = log(n) / log(2);
  long long abc = 100100101101110;
  for(;b >= 0; b--){
    long long B = pow(2, b);
    long long a = n/B;
    long long c = n - a*B;
    long long tmpabc = a + b + c;
    if(abc > tmpabc){
      abc = tmpabc;
    }
  }
  
  cout << abc << endl;
  return 0;
}

//c++ テンプレ
#include<bits/stdc++.h>
using namespace std;

typedef long long llint;
typedef long double ld;

#define inf 1e18
#define mod 1000000007
#define sort(v) sort(v.begin(),v.end())
#define reverse(v) reverse(v.begin(),v.end())
#define rep(i,a,n) for(int i=a;i<n;i++)



priority_queue<llint,vector<llint>,greater<llint> > que;
priority_queue<llint> Que;
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }


void solve(){
    llint n;
    cin >> n;
    llint a=0,b=0,c=0;
    llint x=1;
    llint ans=inf;
    if(n==1)ans=1;
    while(n>1){
        if(n%2==1){
            n-=1;
            c+=x;
        }
        n/=2;
        b+=1;
        x*=2;
        if(ans>n+b+c){
            ans=n+b+c;
        }
    }
    
    //printf("%ld %ld %ld\n",a,b,c);
    cout << ans << endl;
}

int main(){
    solve();
    return 0;
}



