/*
 *Author: Abhijit Kawale
 *IIT Delhi
 *HackerRank Profile: https://www.hackerrank.com/Abhijit_Kawale
 *
 */
#include <sstream>
#include <iostream>
#include <cstring>
#include <numeric>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <memory>
#include <string>
#include <vector>
#include <cctype>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <complex>
#include <set>
#include <algorithm>
using namespace std;

typedef unsigned long long int ulli;
typedef long long int lli;
typedef vector<int> vi;
typedef vector<vector<int> > vii;
typedef vector<lli> vlli;
typedef vector<ulli> vulli;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef pair<int,bool> pib;
typedef pair<int,int> pii;
typedef vector<pair<int,int> > vpii;

#define checkbit(n,b) ((n>>b)&1)
#define fi first
#define se second
#define in(a) cin>>a
#define out(a) cout<<a
#define outl(a) cout<<a<<endl
#define outp(a) cout<<a<<" ";
#define Rep(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) Rep(i,0,n)
#define REP(i,a,b) for(int i=a;i<=b;i++)
#define reP(i,n) REP(i,0,n)
#define all(z) z.begin(),z.end()
#define srt(v) sort(all(v))
#define sz(a) int((a).size())
#define pb push_back
#define mp make_pair
#define inn(i,l,r) (l<i&&i<r)
#define linr(i,l,r) (l<=i&&i<=r)
#define lin(i,l,r) (l<=i&&i<r)
#define inr(i,l,r) (l<i&&i<=r)
#define mod     1000000007
#define gcd(a,b)    __gcd(a,b)
#define inve(v) rep(i,sz(v))in(v[i])
#define outve(v) rep(i,sz(v))outp(v[i])
#define ife(a,b,c) (a?b:c)
#define setparam(s1,s2,si) all(s1),all(s2),inserter(si,si.begin())
#define setintersection(s1,s2,si) set_intersection(setparam(s1,s2,si))// -std=c++11
#define setunion(s1,s2,si) set_union(setparam(s1,s2,si))// -std=c++11
#define setdifference(s1,s2,si) set_difference(setparam(s1,s2,si))// -std=c++11
#define setsymmdifference(s1,s2,si) set_symmetric_difference(setparam(s1,s2,si))// -std=c++11
#define setissubset(s1,s2) includes(all(s1),all(s2)) // -std=c++11
#define foreach(v,c) for(decltype((c).begin()) v=(c).begin();v!=(c).end();++v)


struct debugger
{
    template<typename T> debugger& operator , (const T& v)
    {    
        cerr<<v<<" ";    
        return *this;    
    }
} dbg;
#define DEBUG 1
#define dbug(args...) if(DEBUG){cerr << "DEBUG " << #args << ": "; dbg,args; cerr << endl;}


int ADD(int a, int b, int m = mod) {
    int s = a;
    s += b;
    if( s >= m )
      s -= m;
    return s;
}

int MUL(int a, int b, int m = mod) {
    return (1LL * a * b % m);
}

int power(int a, int b, int m = mod) {
    int res = 1;
    while( b ) {
        if( b & 1 ) {
            res = 1LL * res * a % m;
        }
        a = 1LL * a * a % m;
        b /= 2;
    }
    return res;
}

lli nC2(lli x) {
    return ( x * ( x - 1 ) / 2 );
}

void SieveOfEratosthenes(int n)
{
    bool prime[n+1];
    memset(prime, true, sizeof(prime));
    prime[0] = false;
    prime[1] = false;
    for (int p=2; p*p<=n; p++)
    {
        if (prime[p] == true)
        {
            for (int i=p*2; i<=n; i += p)
                prime[i] = false;
        }
    }
}

int main(){
	lli n;in(n);//int k;in(k);
	lli m;in(m);
	//vi v(n);inve(v);
	outl(n*m-1);

	return 0;
}