马蜂有点屎
#include<bits/stdc++.h>
using namespace std;
int n,m;
typedef string hint;
inline hint ltoh(int n){
hint ans;
if(!n)
return "0";
while(n){
ans=char(n%10+'0')+ans;
n/=10;
}
return ans;
}
hint delz(hint a){
int len=a.size();
int p=0;
for(;p<len-1&&a[p]=='0';p++);
return a.substr(p,len-p);
}
inline hint add(hint a,hint b){
hint ans;
int w,c=0;
if(a.size()>b.size()) swap(a,b);
int len=b.size(),lenx=b.size()-a.size();
while(lenx--)
a='0'+a;
for(int i=len-1;i>=0;i--){
int ai=a[i]-'0',bi=b[i]-'0';
w=ai+bi+c;
c=w/10,w%=10;
ans=char(w+'0')+ans;
}
if(c)
ans=char(c+'0')+ans;
return delz(ans);
}
inline hint mul(hint a,int b){
hint ans;
int w,c=0;
int len=a.size();
for(int i=len-1;i>=0;i--){
int ai=a[i]-'0';
w=ai*b+c;
c=w/10,w%=10;
ans=char(w+'0')+ans;
}
if(c)
ans=ltoh(c)+ans;
return delz(ans);
}
inline hint mul(hint a,hint b){
hint ans;
if(a=="0"||b=="0")
return "0";
string w;
int len=a.size();
for(int i=len-1;i>=0;i--){
int ai=a[i]-'0';
if(ai!=0)
ans=add(ans,mul(b,ai)+w);
w=w+"0";
}
return delz(ans);
}
inline hint A(int n,int m){
if(m<0||n<0||m>n) return "0";
hint ans="1";
for(int i=n-m+1;i<=n;i++){
ans=mul(ans,i);
}
return ans;
}
int main(){
cin>>n>>m;
cout<<mul(A(n,n),add(mul(A(n+2,m-1),m*(2*n+2)),mul(A(n+3,m),n*(n+1))));
return 0;
}