#include<iostream>
using namespace std;
int n,m,counter=0;
bool directionup,directionleft;
int nextstep(int coordx,int coordy,bool first){
	if((coordx==0 && coordy==0 && !first)||(coordx==m-1 && coordy==n-1)||(coordx==m-1 && coordy==0)||(coordx==0 && coordy==n-1)){
		return counter;
	}
	if(!directionup && !directionleft){
		if(m-1-coordx<n){
			directionleft=1;
			counter++;
			//cout<<m-1<<" "<<coordy+(m-1-coordx)<<endl;
			return nextstep(m-1,coordy+(m-1-coordx),0);
		}else{
			directionup=1;
			counter++;
			//cout<<coordx+n-1<<" "<<n-1<<endl;
			return nextstep(coordx+n-1,n-1,0);
		}
	}
	if(directionup && !directionleft){
		if(coordx+coordy<m){
			directionup=0;
			counter++;
			//cout<<coordx+coordy<<" "<<0<<endl;
			return nextstep(coordx+coordy,0,0);
		}else{
			directionleft=1;
			counter++;
			//cout<<m-1<<" "<<coordy-m+1+coordx<<endl;
			return nextstep(m-1,coordy-(m-1-coordx),0);
		}
	}
	if(!directionup && directionleft){
		if(n-1-coordy<m){
			directionup=1;
			counter++;
			//cout<<coordx-n+1+coordy<<" "<<n-1<<endl;
			return nextstep(coordx-n+1+coordy,n-1,0);
		}else{
			directionleft=0;
			counter++;
			//cout<<0<<" "<<coordy+coordx<<endl;
			return nextstep(0,coordy+coordx,0);
		}
	}
	if(directionup && directionleft){
		if(coordx-coordy>=0){
			directionup=0;
			counter++;
			//cout<<coordx-coordy<<" "<<0<<endl;
			return nextstep(coordx-coordy,0,0);
		}else{
			directionleft=0;
			counter++;
			//cout<<0<<" "<<coordy-coordx<<endl;
			return nextstep(0,coordy-coordx,0);
		}
	}
	return 0;
}
int main(){
	cin>>n>>m;
	cout<<nextstep(0,0,1);;
	return 0;
}
