Problem:
Score : 100 points

Problem Statement

There are two buttons, one of size A and one of size B.

When you press a button of size X, you get X coins and the size of that button decreases by 1.

You will press a button twice. Here, you can press the same button twice, or press both buttons once.

At most how many coins can you get?

Constraints

All values in input are integers.

3 \leq A, B \leq 20

Input

Input is given from Standard Input in the following format:

A B

Output

Print the maximum number of coins you can get.

Sample Input 1

5 3

Sample Output 1

9

You can get 5 + 4 = 9 coins by pressing the button of size 5 twice, and this is the maximum result.

Sample Input 2

3 4

Sample Output 2

7

Sample Input 3

6 6

Sample Output 3

12

Solution in Rust (1.15.1) (judge verdict: Runtime Error)

fn main() {
    // 最終目標は
    // 0101...　もしくは 101010...
    // なのだから、そこからのビットの差異の少ないほうが答え。

    let (length, s) = {
        let input = read::<String>();
        (input.len(), u32::from_str_radix(&input[..], 2).unwrap())
    };

    let mut a = 0b0;
    let mut b = 0b0;

    for _ in 0..(length/2) {
        a = (a << 2) + 0b10;
        b = (b << 2) + 0b01;
    }

    if length % 2 == 1 {
        a = (a << 1) + 0b1;
        b = (b << 1) + 0b0;
    }

    let da = (s ^ a).count_ones();
    let db = (s ^ b).count_ones();

    if da >= db {
        println!("{}", db);
    } else {
        println!("{}", da);
    }

    // AtCoderのコンパイラじゃ古くて怒られた。
    //println!("{}", da.min(db));
}

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}