#include <cmath>
#include <iostream>
using namespace std;

int main() {
    /*
        对于任意一个数x
        将其转为2进制           1010 0011 ... 1101
        可将其与这个数异或      0101 1100 ... 0010
        得到                   1111 1111 ... 1111
        这个结果由x的二进制的位数决定
        对于二进制位数相同的数(如4 5 6),得到的结果相同

        在长度为n的排列中,n为二进制位数最多的数字之一
        我们可以对n进行这个操作,得到最大的数,就是所求的值m

        先求log2(n),将结果加1得到n的二进制位数up
        2^up-1即为所求m
    */
    unsigned long long n;
    cin >> n;

    int up = 0;
    up = (int) log2(n) + 1;

    // (1ULL<<up) 即2^up,ULL为unsigned long long,用于防止溢出
    cout << (1ULL<<up) -1;
}

// 64 位输出请用 printf("%lld")