////基本の者ども
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int INF =2000000000;
//////forども//////////////////////////////////////////
#define REP(i,n) for(int i = 0; i < int(n); i++)
#define REPR(i,n) for(int i = int(n); i >= 0; i--)
#define FOR(i,m,n) for(int i = int(m); i < int(n); i++)
#define FOREACH(x,a) for(auto& (x) : (a) )
////////////////////////////////////////////////////////////////
//cinおよびcout拡張
#define COUT(x) cout<<(x)<<endl
void CINT(){}
template <class Head,class... Tail>
void CINT(Head&& head,Tail&&... tail){
    cin>>head;
    CINT(move(tail)...);
}
#define CIN(...) int __VA_ARGS__;CINT(__VA_ARGS__)
#define LCIN(...) ll __VA_ARGS__;CINT(__VA_ARGS__)
#define SCIN(...) string __VA_ARGS__;CINT(__VA_ARGS__)
/////////////////////////////////////////////////////////////////
//////あまった
#define MP make_pair
#define ALL(v) v.begin(), v.end()
#define pb(a) push_back(a)
///////////////////////////////////////////////////////////
//あまり
ll gcd(ll a, ll b){
   if (a%b == 0) return b;
   else return gcd(b, a%b);
}
ll lcm(ll a, ll b){	
   return a*b/gcd(a, b);
}
int pow_kai(int a, int n){//aのn乗を計算します。
  int x = 1;
  while(n > 0){//全てのbitが捨てられるまで。
    if(n&1){//1番右のbitが1のとき。
      x = x*a;
    }
    a = a*a;
    n >>= 1;//bit全体を右に1つシフトして一番右を捨てる。
  }
  return x;
}


//メモ
	//vector<vector<要素の型>> 変数名(要素数1, vector<要素の型>(要素数2, 初期値))
	//vector<intなど> 変数名(要素数,初期値)
	//dfsではvector<vector<int>> g(n);で◎
ll fx(ll k){
    return k*(k+1)/2;
}
void Main(){//本処理はココ
	//入力パート
 	//string ;
 	ll  n,k,ans;
 	cin>>n>>k;
 	ans=0;
 	ll full=fx(n);
 	for(k;k<=n+1;k++){
 	ll up=full-fx(n-k);
 	ll down=fx(k-1);
//  	ans-=fx(n-k+1);/-1;
 	  //  ans;
 	  ans+=up-(down-1);
 	  //  cout<<ans<<endl;
 	}
 //答え出力パート
     cout<<ans;
     cout<<endl;
 }
int main(){//ここは前処理のゾーン
    //COMinit();//nCrするならON
    //Prime();//素数ならコレをon//PRIME_MAXとかisPrimeもいじろう
    //string a,b;
    //ll n,a;
    std::cout << std::fixed << std::setprecision(15);//浮動小数点絶対殺すマン
  	Main();
}
