Problem:
﻿Score: 100 points

Problem Statement

There is a farm whose length and width are A yard and B yard, respectively. A farmer, John, made a vertical road and a horizontal road inside the farm from one border to another, as shown below: (The gray part represents the roads.)

What is the area of this yard excluding the roads? Find it.

Note

It can be proved that the positions of the roads do not affect the area.

Constraints

A is an integer between 2 and 100 (inclusive).

B is an integer between 2 and 100 (inclusive).

Input

Input is given from Standard Input in the following format:

A B

Output

Print the area of this yard excluding the roads (in square yards).

Sample Input 1

2 2

Sample Output 1

1

In this case, the area is 1 square yard.

Sample Input 2

5 7

Sample Output 2

24

In this case, the area is 24 square yards.

Solution in Rust (1.15.1) (judge verdict: Accepted)

macro_rules! input {
    (source = $s:expr, $($r:tt)*) => {
        let mut iter = $s.split_whitespace();
        let mut next = || { iter.next().unwrap() };
        input_inner!{next, $($r)*}
    };
    ($($r:tt)*) => {
        let stdin = std::io::stdin();
        let mut bytes = std::io::Read::bytes(std::io::BufReader::new(stdin.lock()));
        let mut next = move || -> String{
            bytes
                .by_ref()
                .map(|r|r.unwrap() as char)
                .skip_while(|c|c.is_whitespace())
                .take_while(|c|!c.is_whitespace())
                .collect()
        };
        input_inner!{next, $($r)*}
    };
}
 
macro_rules! input_inner {
    ($next:expr) => {};
    ($next:expr, ) => {};
 
    ($next:expr, $var:ident : $t:tt $($r:tt)*) => {
        let $var = read_value!($next, $t);
        input_inner!{$next $($r)*}
    };
}
 
macro_rules! read_value {
    ($next:expr, ( $($t:tt),* )) => {
        ( $(read_value!($next, $t)),* )
    };
 
    ($next:expr, [ $t:tt ; $len:expr ]) => {
        (0..$len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()
    };
 
    ($next:expr, chars) => {
        read_value!($next, String).chars().collect::<Vec<char>>()
    };
 
    ($next:expr, usize1) => {
        read_value!($next, usize) - 1
    };
 
    ($next:expr, $t:ty) => {
        $next().parse::<$t>().expect("Parse error")
    };
}

fn main() {
/*ABC109_A
    let ab=read_a();
    let a:i64=ab[0];
    let b:i64=ab[1];
    let mut j=false;
    for c in 1..4{
        if a*b*(c as i64)%2==1{j=true;}
    }
    if j{println!("Yes")} else {println!("No")};
*/

//use std::collections::BTreeSet;
/*ABC109_B
    let n=read_n();
    let mut w:Vec<Vec<char>>=vec!();
    for _ in 0..n{w.push(read_s())};
    //println!("{},{:?}", n,w);
    let mut j=true;
    if w.iter().collect::<BTreeSet<_>>().len() !=n{j=false};
    for i in 0..n-1{
        if w[i][w[i].len()-1]!=w[i+1][0]{j=false};
    }
    if j{println!("Yes");} else {println!("No");}
*/

//fn abs(a:i64)->i64{if a>0{a} else {-a}}
/*ABC109_C
    let nx:Vec<i64>=read_a();
    let n=nx[0] as usize;
    let x=nx[1];
    let mut a:Vec<i64>=read_a();
    let mut b:Vec<i64>=vec!();
    for i in 0..n{
        b.push(a[i as usize]-x);
    }
    fn gcd(a: i64, b: i64) -> i64 {
        if b == 0 {a} else {gcd(b, a % b)}
    }
    let mut ans=b[0];
    for i in 0..n{ans=gcd(ans,b[i]);}
    fn abs(a:i64)->i64{if a>0{a} else {-a}}
    ans=abs(ans);
    println!("{}",ans);
*/
/*ABC109_D
    input!{
        h: usize,
        w: usize,
        a: [[i32; w]; h],
    }
    let mut a=a;
    let mut n:usize=0;
    let mut ans=vec![];
    for i in 0..h{
        for j in 0..w{
            if j+1<w{
                if a[i][j]%2==1{
                    n+=1; a[i][j]-=1;a[i][j+1]+=1; ans.push((i+1,j+1,i+1,j+2));
                }
            }else if i+1<h{
                if a[i][j]%2==1{
                    n+=1; a[i][j]-=1;a[i+1][j]+=1; ans.push((i+1,j+1,i+2,j+1));
                }
            }
        }
    }
    println!("{}", n);
    for (x1,y1,x2,y2) in ans{
        println!("{} {} {} {}", x1,y1,x2,y2);
    }
*/

/*ABC108_A
    input!{
        k:usize,
    }
    let ans = {
        if k%2==0{k*k/4}else{k/2*(k-k/2)}
    };
    println!("{}",ans);
*/
/*ABC108_B
    input!{
        xy:[i32;4]
    }
    let x1=xy[0];
    let y1=xy[1];
    let x2=xy[2];
    let y2=xy[3];
    let x3=x2-y2+y1;
    let y3=y2+x2-x1;
    let x4=x1-y2+y1;
    let y4=y1+x2-x1;
    println!("{} {} {} {}", x3,y3,x4,y4);
*/
/*ABC107
    input!{
        ni:[i32;2],
    }
    let n=ni[0];let i=ni[1];
    println!("{}",n-i+1);
*/
/*ABC106
*/
    input!{
        ab:[i32;2]
    }
    println!("{}",(ab[0]-1)*(ab[1]-1));















}