using System; using System.Globalization; using System.IO; using System.Linq; using System.Text; namespace CF317 { internal class Program { private static void Main(string[] args) { var sr = new InputReader(Console.In); //var sr = new InputReader(new StreamReader("input.txt")); var task = new Task(); using (var sw = Console.Out) //using (var sw = new StreamWriter("output.txt")) { task.Solve(sr, sw); //Console.ReadKey(); } } } internal class Task { public void Solve(InputReader sr, TextWriter sw) { var input = sr.ReadArray(Int64.Parse); var n = input[0]; var m = input[1]; if (n == 1 && m == 1) { sw.WriteLine(0); return; } if (n == 1) { sw.WriteLine(m - 1); return; } if (m == 1) { sw.WriteLine(n - 1); return; } var min = Math.Min(n, m); var max = Math.Max(n, m); sw.WriteLine((max - 1) + (max) * (min - 1)); } } } internal class InputReader : IDisposable { private bool isDispose; private readonly TextReader sr; public InputReader(TextReader stream) { sr = stream; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } public string NextString() { var result = sr.ReadLine(); return result; } public int NextInt32() { return Int32.Parse(NextString()); } public long NextInt64() { return Int64.Parse(NextString()); } public string[] NextSplitStrings() { return NextString() .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); } public T[] ReadArray(Func func) { return NextSplitStrings() .Select(s => func(s, CultureInfo.InvariantCulture)) .ToArray(); } public T[] ReadArrayFromString(Func func, string str) { return str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) .Select(s => func(s, CultureInfo.InvariantCulture)) .ToArray(); } protected void Dispose(bool dispose) { if (!isDispose) { if (dispose) sr.Close(); isDispose = true; } } ~InputReader() { Dispose(false); } }