import java.io.*;

import java.math.BigInteger;
import java.util.*;

import java.util.ArrayList;

import java.util.Scanner;


 class Main {

    /*static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    static final int mod = 1000000007;

    public static int gcd(int a, int b)
    {
        if (a == 0)
            return b;
        return gcd(b % a, a);
    }
    public static boolean isPalindrome(String str)
    {

        // Pointers pointing to the beginning
        // and the end of the string
        int i = 0, j = str.length() - 1;

        // While there are characters toc compare
        while (i < j) {

            // If there is a mismatch
            if (str.charAt(i) != str.charAt(j))
                return false;

            // Increment first pointer and
            // decrement the other
            i++;
            j--;
        }

        // Given string is a palindrome
        return true;
    }*/

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

        long h = sc.nextLong();
        int f = 1;
        long c = 1;
        long ans = 0;
        if (h == 1)
            System.out.println(1);
        else {
            while (f != 0) {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            }
            System.out.println(ans);
        }
    }
    }

 import java.io.*; io.* java import java.math.BigInteger; BigInteger java.math import java.util.*; util.* java import java.util.ArrayList; ArrayList java.util import java.util.Scanner; Scanner java.util class Main {

    /*static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    static final int mod = 1000000007;

    public static int gcd(int a, int b)
    {
        if (a == 0)
            return b;
        return gcd(b % a, a);
    }
    public static boolean isPalindrome(String str)
    {

        // Pointers pointing to the beginning
        // and the end of the string
        int i = 0, j = str.length() - 1;

        // While there are characters toc compare
        while (i < j) {

            // If there is a mismatch
            if (str.charAt(i) != str.charAt(j))
                return false;

            // Increment first pointer and
            // decrement the other
            i++;
            j--;
        }

        // Given string is a palindrome
        return true;
    }*/

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

        long h = sc.nextLong();
        int f = 1;
        long c = 1;
        long ans = 0;
        if (h == 1)
            System.out.println(1);
        else {
            while (f != 0) {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            }
            System.out.println(ans);
        }
    }
    } Main public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        long h = sc.nextLong();
        int f = 1;
        long c = 1;
        long ans = 0;
        if (h == 1)
            System.out.println(1);
        else {
            while (f != 0) {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            }
            System.out.println(ans);
        }
    } main {
        Scanner sc = new Scanner(System.in);

        long h = sc.nextLong();
        int f = 1;
        long c = 1;
        long ans = 0;
        if (h == 1)
            System.out.println(1);
        else {
            while (f != 0) {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            }
            System.out.println(ans);
        }
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) long h = sc.nextLong(); h sc.nextLong() sc.nextLong sc int f = 1; f 1 long c = 1; c 1 long ans = 0; ans 0 if (h == 1)
            System.out.println(1);
        else {
            while (f != 0) {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            }
            System.out.println(ans);
        } h == 1 h 1 System.out.println(1) System.out.println System.out System System.out 1 {
            while (f != 0) {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            }
            System.out.println(ans);
        } while (f != 0) {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            } f != 0 f 0 {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            } h /= 2 h 2 ans+=c ans c c*=2 c 2 if (h == 1) {
                    ans+=c;

                    break;
                } h == 1 h 1 {
                    ans+=c;

                    break;
                } ans+=c ans c break; System.out.println(ans) System.out.println System.out System System.out ans String[] args args
import java.io.*;

import java.math.BigInteger;
import java.util.*;

import java.util.ArrayList;

import java.util.Scanner;


 class Main {

    /*static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    static final int mod = 1000000007;

    public static int gcd(int a, int b)
    {
        if (a == 0)
            return b;
        return gcd(b % a, a);
    }
    public static boolean isPalindrome(String str)
    {

        // Pointers pointing to the beginning
        // and the end of the string
        int i = 0, j = str.length() - 1;

        // While there are characters toc compare
        while (i < j) {

            // If there is a mismatch
            if (str.charAt(i) != str.charAt(j))
                return false;

            // Increment first pointer and
            // decrement the other
            i++;
            j--;
        }

        // Given string is a palindrome
        return true;
    }*/

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

        long h = sc.nextLong();
        int f = 1;
        long c = 1;
        long ans = 0;
        if (h == 1)
            System.out.println(1);
        else {
            while (f != 0) {
                h /= 2;
                ans+=c;

                c*=2;

                if (h == 1) {
                    ans+=c;

                    break;
                }



            }
            System.out.println(ans);
        }
    }
    }


