
import java.util.Scanner;

public class Main {

     static Scanner scanner;

     public static void main(String[] args) {
         scanner = new Scanner(System.in);

         long H=gl();


         System.out.println(f(H));
     }

     public static long f(long n) {
    	 if(n==1)return 1;
    	 return 1+(2*f(n>>1));
     }

     // 文字列として入力を取得
     public static String gs() {
          return scanner.next();
     }

     // intとして入力を取得
     public static int gi() {
          return Integer.parseInt(scanner.next());
     }

     // longとして入力を取得
     public static long gl() {
          return Long.parseLong(scanner.next());
     }

     // doubleとして入力を取得
     public static double gd() {
          return Double.parseDouble(scanner.next());
     }
} import java.util.Scanner; Scanner java.util public class Main {

     static Scanner scanner;

     public static void main(String[] args) {
         scanner = new Scanner(System.in);

         long H=gl();


         System.out.println(f(H));
     }

     public static long f(long n) {
    	 if(n==1)return 1;
    	 return 1+(2*f(n>>1));
     }

     // 文字列として入力を取得
     public static String gs() {
          return scanner.next();
     }

     // intとして入力を取得
     public static int gi() {
          return Integer.parseInt(scanner.next());
     }

     // longとして入力を取得
     public static long gl() {
          return Long.parseLong(scanner.next());
     }

     // doubleとして入力を取得
     public static double gd() {
          return Double.parseDouble(scanner.next());
     }
} Main static Scanner scanner; scanner public static void main(String[] args) {
         scanner = new Scanner(System.in);

         long H=gl();


         System.out.println(f(H));
     } main {
         scanner = new Scanner(System.in);

         long H=gl();


         System.out.println(f(H));
     } scanner = new Scanner(System.in) scanner new Scanner(System.in) long H=gl(); H gl() gl System.out.println(f(H)) System.out.println System.out System System.out f(H) f H String[] args args public static long f(long n) {
    	 if(n==1)return 1;
    	 return 1+(2*f(n>>1));
     } f {
    	 if(n==1)return 1;
    	 return 1+(2*f(n>>1));
     } if(n==1)return 1; n==1 n 1 return 1; 1 return 1+(2*f(n>>1)); 1+(2*f(n>>1)) 1 (2*f(n>>1)) 2 f(n>>1) f n>>1 n 1 long n n // 文字列として入力を取得
     public static String gs() {
          return scanner.next();
     } gs {
          return scanner.next();
     } return scanner.next(); scanner.next() scanner.next scanner // intとして入力を取得
     public static int gi() {
          return Integer.parseInt(scanner.next());
     } gi {
          return Integer.parseInt(scanner.next());
     } return Integer.parseInt(scanner.next()); Integer.parseInt(scanner.next()) Integer.parseInt Integer scanner.next() scanner.next scanner // longとして入力を取得
     public static long gl() {
          return Long.parseLong(scanner.next());
     } gl {
          return Long.parseLong(scanner.next());
     } return Long.parseLong(scanner.next()); Long.parseLong(scanner.next()) Long.parseLong Long scanner.next() scanner.next scanner // doubleとして入力を取得
     public static double gd() {
          return Double.parseDouble(scanner.next());
     } gd {
          return Double.parseDouble(scanner.next());
     } return Double.parseDouble(scanner.next()); Double.parseDouble(scanner.next()) Double.parseDouble Double scanner.next() scanner.next scanner public class Main {

     static Scanner scanner;

     public static void main(String[] args) {
         scanner = new Scanner(System.in);

         long H=gl();


         System.out.println(f(H));
     }

     public static long f(long n) {
    	 if(n==1)return 1;
    	 return 1+(2*f(n>>1));
     }

     // 文字列として入力を取得
     public static String gs() {
          return scanner.next();
     }

     // intとして入力を取得
     public static int gi() {
          return Integer.parseInt(scanner.next());
     }

     // longとして入力を取得
     public static long gl() {
          return Long.parseLong(scanner.next());
     }

     // doubleとして入力を取得
     public static double gd() {
          return Double.parseDouble(scanner.next());
     }
} public class Main {

     static Scanner scanner;

     public static void main(String[] args) {
         scanner = new Scanner(System.in);

         long H=gl();


         System.out.println(f(H));
     }

     public static long f(long n) {
    	 if(n==1)return 1;
    	 return 1+(2*f(n>>1));
     }

     // 文字列として入力を取得
     public static String gs() {
          return scanner.next();
     }

     // intとして入力を取得
     public static int gi() {
          return Integer.parseInt(scanner.next());
     }

     // longとして入力を取得
     public static long gl() {
          return Long.parseLong(scanner.next());
     }

     // doubleとして入力を取得
     public static double gd() {
          return Double.parseDouble(scanner.next());
     }
} Main

import java.util.Scanner;

public class Main {

     static Scanner scanner;

     public static void main(String[] args) {
         scanner = new Scanner(System.in);

         long H=gl();


         System.out.println(f(H));
     }

     public static long f(long n) {
    	 if(n==1)return 1;
    	 return 1+(2*f(n>>1));
     }

     // 文字列として入力を取得
     public static String gs() {
          return scanner.next();
     }

     // intとして入力を取得
     public static int gi() {
          return Integer.parseInt(scanner.next());
     }

     // longとして入力を取得
     public static long gl() {
          return Long.parseLong(scanner.next());
     }

     // doubleとして入力を取得
     public static double gd() {
          return Double.parseDouble(scanner.next());
     }
}