local mmi, mma = math.min, math.max
local h, w = io.read("*n", "*n")
if h % 3 == 0 or w % 3 == 0 then print(0)
else
  local mincand = 0
  if 2 < h then
    mincand = w
  end
  if 2 < w then
    if mincand == 0 then mincand = h
    else mincand = mmi(h, mincand)
    end
  end
  if mincand == 0 then
    -- 2 x 2
    print(1)
  else
    local h_cut_pos = h // 3
    if 0 < h_cut_pos then
      local cut1 = h_cut_pos * w
      local rem_h = h - h_cut_pos
      local cut2 = rem_h * (w // 2)
      local cut3 = rem_h * w - cut2
      mincand = mmi(mincand, mma(cut3 - cut2, cut3 - cut1))
    end
    h_cut_pos = h_cut_pos + 1
    do
      local cut1 = h_cut_pos * w
      local rem_h = h - h_cut_pos
      local cut2 = rem_h * (w // 2)
      local cut3 = rem_h * w - cut2
      mincand = mmi(mincand, mma(cut3 - cut2, cut1 - cut2))
    end
    local w_cut_pos = w // 3
    if 0 < w_cut_pos then
      local cut1 = w_cut_pos * h
      local rem_w = w - w_cut_pos
      local cut2 = rem_w * (h // 2)
      local cut3 = rem_w * h - cut2
      mincand = mmi(mincand, mma(cut3 - cut2, cut3 - cut1))
    end
    w_cut_pos = w_cut_pos + 1
    do
      local cut1 = w_cut_pos * h
      local rem_w = w - w_cut_pos
      local cut2 = rem_w * (h // 2)
      local cut3 = rem_w * h - cut2
      mincand = mmi(mincand, mma(cut3 - cut2, cut1 - cut2))
    end
    print(mincand)
  end
end
