/*
#include <stdio.h>
struct tree
{
int end;
int start;
int big;
};
#define no -100
struct tree wood[50002][20];
int max_floor=1;
int find(int n,int m,int lotat,int floor)
{
//int i,j;
int big = no;
int temp;
if(wood[lotat][floor].start>=n)
{
if(wood[lotat][floor].end<=m)
{
return wood[lotat][floor].big;
}
}
///찾아봐요 버그의 숲
else if(wood[lotat][floor].start<n)
{
///n = start
///m = end
///n ~ m
///start ~ end
if(wood[lotat][floor].end>m)
{
temp = find(n,m,lotat*2,floor-1);
if(big < temp)
{
big = temp;
}
temp = find(n,m,(lotat*2)-1,floor-1);
if(big < temp)
{
big = temp;
}
}
else if(wood[lotat][floor].end<=m)
{
if(wood[lotat][floor].end>=n)
{
temp = find(n,m,lotat*2,floor-1);
if(big < temp)
{
big = temp;
}
temp = find(n,m,(lotat*2)-1,floor-1);
if(big < temp)
{
big = temp;
}
}
}
}
if(wood[lotat][floor].end>m)
{
if(wood[lotat][floor].start<=m)
{
temp = find(n,m,lotat*2,floor-1);
if(big < temp)
{
big = temp;
}
temp = find(n,m,(lotat*2)-1,floor-1);
if(big < temp)
{
big = temp;
}
}
}
return big;
}
int main()
{
int n,m,i,j;
int musigi;
scanf("%d",&n);
for(i = 1; i <= n; i++)
{
scanf("%d",&wood[i][0].big);
wood[i][0].end =i;
wood[i][0].start = i;
}
for(i=n; i!=1; i=(i/2)+(i%2))
{
for(j=1; j<=i; j++)
{
if(j%2==0)
{
wood[j/2][max_floor].end=wood[j][max_floor-1].end;
wood[j/2][max_floor].start=wood[j-1][max_floor-1].start;
wood[j/2][max_floor].big=wood[j][max_floor-1].big > wood[j-1][max_floor-1].big?wood[j][max_floor-1].big:wood[j-1][max_floor-1].big;
}
}
if(i%2==1)
{
wood[i/2+1][max_floor].end=wood[i][max_floor-1].end;
wood[i/2+1][max_floor].start=wood[i][max_floor-1].start;
wood[i/2+1][max_floor].big = wood[i][max_floor-1].big;
}
max_floor++;
}
max_floor--;
//printf("%d",max_floor);
scanf("%d",&musigi);
for(i = 1; i <= musigi; i++)
{
scanf("%d%d",&n,&m);
printf("%d ",find(n,m,1,max_floor));
}
}
*/
#include <stdio.h>
int main()
{
int i,j;
int x;
int d1,d2;
scanf("%d%d",&d1,&d2);
x = d1;
x *= ((d2-d1)-(d2-d1)/6);
x += d1 * (d2-d1)/12;
printf("%d",&x);
}