void main(){
  import std.stdio, std.string, std.conv, std.algorithm;

  // int n=6, m=10;
  // auto c=new int[][](n, m);
  // auto dir=[[-1, -1], [-1, 0], [-1, 1], [0, 1], [1, 1], [1, 0], [1, -1], [0, -1]];
  // foreach(i; 0..n)foreach(j; 0..m){
  //   c[i][j]^=1;
  //   foreach(d; dir){
  //     auto ni=i+d[0], nj=j+d[1];
  //     if(ni<0 || ni>=n || nj<0 || nj>=m) continue;
  //     c[ni][nj]^=1;
  //   }
  // }

  // foreach(i; 0..n) writeln(c[i]);

  // writeln(313*2+1591*2);

  long n, m; rd(n, m);
  if(n==1 && m==1) writeln(1);
  else if(n==1) writeln(m-2); 
  else if(m==1) writeln(n-2);
  else writeln(n*m-((n-1)*2+(m-1)*2));
}

void rd(T...)(ref T x){
  import std.stdio, std.string, std.conv;
  auto l=readln.split;
  assert(l.length==x.length);
  foreach(i, ref e; x){
    e=l[i].to!(typeof(e));
  }
}