import java.io.*;
import java.util.*;
import static java.lang.System.out;

public class Main{
    static MyReader in = new MyReader();

    public static void main(String[] args){
        long H = in.l();
        out.println(solve(H));
    }
    
    static long solve(long h){
        if(h == 1){
            return 1;
        } else {
            return 1+solve(h/2)*2;
        }
    }
    
    static long solve2(long h){
        int bit = 0;
        while(h != 0){
            bit++;
            h >>= 1;
        }
        return (1L<<bit)-1;
    }
   

    static class MyReader extends BufferedReader{
        MyReader(){
            super(new InputStreamReader(System.in));
        }

        String s(){
            try{return readLine();}catch(IOException e){return "";}
        }

        String[] ss(){
            return s().split(" ");
        }

        int i(){
            return Integer.parseInt(s());
        }

        int[] ii(){
            String[] ss = ss();
            int[] ii = new int[ss.length];
            for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]);
            return ii;
        }

        ArrayList<Integer> li(){
            String[] ss = ss();
            ArrayList<Integer> li = new ArrayList<>();
            for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j]));
            return li;
        }

        long l(){
            return Long.parseLong(s());
        }

        long[] ll(){
            String[] ss = ss();
            long[] ll = new long[ss.length];
            for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]);
            return ll;
        }
    }
} import java.io.*; io.* java import java.util.*; util.* java import static java.lang.System.out; import static java.lang.System.out; import static java.lang.System.out; public class Main{
    static MyReader in = new MyReader();

    public static void main(String[] args){
        long H = in.l();
        out.println(solve(H));
    }
    
    static long solve(long h){
        if(h == 1){
            return 1;
        } else {
            return 1+solve(h/2)*2;
        }
    }
    
    static long solve2(long h){
        int bit = 0;
        while(h != 0){
            bit++;
            h >>= 1;
        }
        return (1L<<bit)-1;
    }
   

    static class MyReader extends BufferedReader{
        MyReader(){
            super(new InputStreamReader(System.in));
        }

        String s(){
            try{return readLine();}catch(IOException e){return "";}
        }

        String[] ss(){
            return s().split(" ");
        }

        int i(){
            return Integer.parseInt(s());
        }

        int[] ii(){
            String[] ss = ss();
            int[] ii = new int[ss.length];
            for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]);
            return ii;
        }

        ArrayList<Integer> li(){
            String[] ss = ss();
            ArrayList<Integer> li = new ArrayList<>();
            for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j]));
            return li;
        }

        long l(){
            return Long.parseLong(s());
        }

        long[] ll(){
            String[] ss = ss();
            long[] ll = new long[ss.length];
            for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]);
            return ll;
        }
    }
} Main static MyReader in = new MyReader(); in new MyReader() public static void main(String[] args){
        long H = in.l();
        out.println(solve(H));
    } main {
        long H = in.l();
        out.println(solve(H));
    } long H = in.l(); H in.l() in.l in out.println(solve(H)) out.println out solve(H) solve H String[] args args static long solve(long h){
        if(h == 1){
            return 1;
        } else {
            return 1+solve(h/2)*2;
        }
    } solve {
        if(h == 1){
            return 1;
        } else {
            return 1+solve(h/2)*2;
        }
    } if(h == 1){
            return 1;
        } else {
            return 1+solve(h/2)*2;
        } h == 1 h 1 {
            return 1;
        } return 1; 1 {
            return 1+solve(h/2)*2;
        } return 1+solve(h/2)*2; 1+solve(h/2)*2 1 solve(h/2)*2 solve(h/2) solve h/2 h 2 2 long h h static long solve2(long h){
        int bit = 0;
        while(h != 0){
            bit++;
            h >>= 1;
        }
        return (1L<<bit)-1;
    } solve2 {
        int bit = 0;
        while(h != 0){
            bit++;
            h >>= 1;
        }
        return (1L<<bit)-1;
    } int bit = 0; bit 0 while(h != 0){
            bit++;
            h >>= 1;
        } h != 0 h 0 {
            bit++;
            h >>= 1;
        } bit++ bit h >>= 1 h 1 return (1L<<bit)-1; (1L<<bit)-1 (1L<<bit) 1L bit 1 long h h static class MyReader extends BufferedReader{
        MyReader(){
            super(new InputStreamReader(System.in));
        }

        String s(){
            try{return readLine();}catch(IOException e){return "";}
        }

        String[] ss(){
            return s().split(" ");
        }

        int i(){
            return Integer.parseInt(s());
        }

        int[] ii(){
            String[] ss = ss();
            int[] ii = new int[ss.length];
            for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]);
            return ii;
        }

        ArrayList<Integer> li(){
            String[] ss = ss();
            ArrayList<Integer> li = new ArrayList<>();
            for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j]));
            return li;
        }

        long l(){
            return Long.parseLong(s());
        }

        long[] ll(){
            String[] ss = ss();
            long[] ll = new long[ss.length];
            for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]);
            return ll;
        }
    } MyReader MyReader(){
            super(new InputStreamReader(System.in));
        } MyReader {
            super(new InputStreamReader(System.in));
        } super(new InputStreamReader(System.in)) super new InputStreamReader(System.in) String s(){
            try{return readLine();}catch(IOException e){return "";}
        } s {
            try{return readLine();}catch(IOException e){return "";}
        } try{return readLine();}catch(IOException e){return "";} catch(IOException e){return "";} IOException e {return "";} return ""; "" {return readLine();} return readLine(); readLine() readLine String[] ss(){
            return s().split(" ");
        } ss {
            return s().split(" ");
        } return s().split(" "); s().split(" ") s().split s() s " " int i(){
            return Integer.parseInt(s());
        } i {
            return Integer.parseInt(s());
        } return Integer.parseInt(s()); Integer.parseInt(s()) Integer.parseInt Integer s() s int[] ii(){
            String[] ss = ss();
            int[] ii = new int[ss.length];
            for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]);
            return ii;
        } ii {
            String[] ss = ss();
            int[] ii = new int[ss.length];
            for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]);
            return ii;
        } String[] ss = ss(); ss ss() ss int[] ii = new int[ss.length]; ii new int[ss.length] ss.length ss ss.length for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]); int j = 0; int j = 0; j 0 j < ss.length j ss.length ss ss.length j++ j++ j ii[j] = Integer.parseInt(ss[j]); ii[j] = Integer.parseInt(ss[j]) ii[j] ii j Integer.parseInt(ss[j]) Integer.parseInt Integer ss[j] ss j return ii; ii ArrayList<Integer> li(){
            String[] ss = ss();
            ArrayList<Integer> li = new ArrayList<>();
            for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j]));
            return li;
        } li {
            String[] ss = ss();
            ArrayList<Integer> li = new ArrayList<>();
            for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j]));
            return li;
        } String[] ss = ss(); ss ss() ss ArrayList<Integer> li = new ArrayList<>(); li new ArrayList<>() for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j])); int j = 0; int j = 0; j 0 j < ss.length j ss.length ss ss.length j++ j++ j li.add(Integer.parseInt(ss[j])); li.add(Integer.parseInt(ss[j])) li.add li Integer.parseInt(ss[j]) Integer.parseInt Integer ss[j] ss j return li; li long l(){
            return Long.parseLong(s());
        } l {
            return Long.parseLong(s());
        } return Long.parseLong(s()); Long.parseLong(s()) Long.parseLong Long s() s long[] ll(){
            String[] ss = ss();
            long[] ll = new long[ss.length];
            for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]);
            return ll;
        } ll {
            String[] ss = ss();
            long[] ll = new long[ss.length];
            for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]);
            return ll;
        } String[] ss = ss(); ss ss() ss long[] ll = new long[ss.length]; ll new long[ss.length] ss.length ss ss.length for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]); int j = 0; int j = 0; j 0 j < ss.length j ss.length ss ss.length j++ j++ j ll[j] = Long.parseLong(ss[j]); ll[j] = Long.parseLong(ss[j]) ll[j] ll j Long.parseLong(ss[j]) Long.parseLong Long ss[j] ss j return ll; ll BufferedReader public class Main{
    static MyReader in = new MyReader();

    public static void main(String[] args){
        long H = in.l();
        out.println(solve(H));
    }
    
    static long solve(long h){
        if(h == 1){
            return 1;
        } else {
            return 1+solve(h/2)*2;
        }
    }
    
    static long solve2(long h){
        int bit = 0;
        while(h != 0){
            bit++;
            h >>= 1;
        }
        return (1L<<bit)-1;
    }
   

    static class MyReader extends BufferedReader{
        MyReader(){
            super(new InputStreamReader(System.in));
        }

        String s(){
            try{return readLine();}catch(IOException e){return "";}
        }

        String[] ss(){
            return s().split(" ");
        }

        int i(){
            return Integer.parseInt(s());
        }

        int[] ii(){
            String[] ss = ss();
            int[] ii = new int[ss.length];
            for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]);
            return ii;
        }

        ArrayList<Integer> li(){
            String[] ss = ss();
            ArrayList<Integer> li = new ArrayList<>();
            for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j]));
            return li;
        }

        long l(){
            return Long.parseLong(s());
        }

        long[] ll(){
            String[] ss = ss();
            long[] ll = new long[ss.length];
            for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]);
            return ll;
        }
    }
} public class Main{
    static MyReader in = new MyReader();

    public static void main(String[] args){
        long H = in.l();
        out.println(solve(H));
    }
    
    static long solve(long h){
        if(h == 1){
            return 1;
        } else {
            return 1+solve(h/2)*2;
        }
    }
    
    static long solve2(long h){
        int bit = 0;
        while(h != 0){
            bit++;
            h >>= 1;
        }
        return (1L<<bit)-1;
    }
   

    static class MyReader extends BufferedReader{
        MyReader(){
            super(new InputStreamReader(System.in));
        }

        String s(){
            try{return readLine();}catch(IOException e){return "";}
        }

        String[] ss(){
            return s().split(" ");
        }

        int i(){
            return Integer.parseInt(s());
        }

        int[] ii(){
            String[] ss = ss();
            int[] ii = new int[ss.length];
            for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]);
            return ii;
        }

        ArrayList<Integer> li(){
            String[] ss = ss();
            ArrayList<Integer> li = new ArrayList<>();
            for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j]));
            return li;
        }

        long l(){
            return Long.parseLong(s());
        }

        long[] ll(){
            String[] ss = ss();
            long[] ll = new long[ss.length];
            for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]);
            return ll;
        }
    }
} Main
import java.io.*;
import java.util.*;
import static java.lang.System.out;

public class Main{
    static MyReader in = new MyReader();

    public static void main(String[] args){
        long H = in.l();
        out.println(solve(H));
    }
    
    static long solve(long h){
        if(h == 1){
            return 1;
        } else {
            return 1+solve(h/2)*2;
        }
    }
    
    static long solve2(long h){
        int bit = 0;
        while(h != 0){
            bit++;
            h >>= 1;
        }
        return (1L<<bit)-1;
    }
   

    static class MyReader extends BufferedReader{
        MyReader(){
            super(new InputStreamReader(System.in));
        }

        String s(){
            try{return readLine();}catch(IOException e){return "";}
        }

        String[] ss(){
            return s().split(" ");
        }

        int i(){
            return Integer.parseInt(s());
        }

        int[] ii(){
            String[] ss = ss();
            int[] ii = new int[ss.length];
            for(int j = 0; j < ss.length; j++) ii[j] = Integer.parseInt(ss[j]);
            return ii;
        }

        ArrayList<Integer> li(){
            String[] ss = ss();
            ArrayList<Integer> li = new ArrayList<>();
            for(int j = 0; j < ss.length; j++) li.add(Integer.parseInt(ss[j]));
            return li;
        }

        long l(){
            return Long.parseLong(s());
        }

        long[] ll(){
            String[] ss = ss();
            long[] ll = new long[ss.length];
            for(int j = 0; j < ss.length; j++) ll[j] = Long.parseLong(ss[j]);
            return ll;
        }
    }
}
