#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
int main(void){
    long long h,w,tmp,ans;
    scanf("%lld%lld",&h,&w);
    
    if (h%3==0 || w%3==0){
        printf("0\n");
        exit(0);
    } else {
        long long s=h*w;
        
        long long s1=h*((w+3-1)/3);
        long long s2=(h/2)*(w-((w+3-1)/3));
        long long s3=s-s1-s2;
        long long smin=s1,smax=s1;
        if (smin>s2){
            smin=s2;
        }
        if (smin>s3){
            smin=s3;
        }
        if (smax<s2){
            smax=s2;
        }
        if (smax<s3){
            smax=s3;
        }
        ans=smax-smin;            
        
        s1=h*(w/3);
        s2=(h/2)*(w-(w/3));
        s3=s-s1-s2;
        smin=s1,smax=s1;
        if (smin>s2){
            smin=s2;
        }
        if (smin>s3){
            smin=s3;
        }
        if (smax<s2){
            smax=s2;
        }
        if (smax<s3){
            smax=s3;
        }      
        if (ans>smax-smin){
            ans=smax-smin;
        }
        
        s1=h*(w/3);
        s2=h*((w-(w/3))/2);
        s3=s-s1-s2;
        smin=s1,smax=s1;
        if (smin>s2){
            smin=s2;
        }
        if (smin>s3){
            smin=s3;
        }
        if (smax<s2){
            smax=s2;
        }
        if (smax<s3){
            smax=s3;
        }
        if (ans>smax-smin){
            ans=smax-smin;
        }
        
        s1=h*((w+3-1)/3);
        s2=h*((w+3-1)/3)/2;
        s3=s-s1-s2;
        smin=s1,smax=s1;
        if (smin>s2){
            smin=s2;
        }
        if (smin>s3){
            smin=s3;
        }
        if (smax<s2){
            smax=s2;
        }
        if (smax<s3){
            smax=s3;
        }
        if (ans>smax-smin){
            ans=smax-smin;
        }
        
        tmp=h;
        h=w;
        w=tmp;
            
        s1=h*((w+3-1)/3);
        s2=(h/2)*(w-((w+3-1)/3));
        s3=s-s1-s2;
        smin=s1,smax=s1;
        if (smin>s2){
            smin=s2;
        }
        if (smin>s3){
            smin=s3;
        }
        if (smax<s2){
            smax=s2;
        }
        if (smax<s3){
            smax=s3;
        }
        if (ans>smax-smin){
            ans=smax-smin;
        }
        
        s1=h*(w/3);
        s2=(h/2)*(w-(w/3));
        s3=s-s1-s2;
        smin=s1,smax=s1;
        if (smin>s2){
            smin=s2;
        }
        if (smin>s3){
            smin=s3;
        }
        if (smax<s2){
            smax=s2;
        }
        if (smax<s3){
            smax=s3;
        }
        if (ans>smax-smin){
            ans=smax-smin;
        }
        
        s1=h*(w/3);
        s2=h*((w-(w/3))/2);
        s3=s-s1-s2;
        smin=s1,smax=s1;
        if (smin>s2){
            smin=s2;
        }
        if (smin>s3){
            smin=s3;
        }
        if (smax<s2){
            smax=s2;
        }
        if (smax<s3){
            smax=s3;
        }
        if (ans>smax-smin){
            ans=smax-smin;
        }
        
        s1=h*((w+3-1)/3);
        s2=h*((w+3-1)/3)/2;
        s3=s-s1-s2;
        smin=s1,smax=s1;
        if (smin>s2){
            smin=s2;
        }
        if (smin>s3){
            smin=s3;
        }
        if (smax<s2){
            smax=s2;
        }
        if (smax<s3){
            smax=s3;
        }
        if (ans>smax-smin){
            ans=smax-smin;
        }
    }
    printf("%lld\n",ans);
	return 0 ;
}

Measured memory_bytes: 128