#include <bits/stdc++.h>   using namespace std;   template <typename T>   inline T S(T a) {     return a * a;   }   template <class T>   inline string tostring(T a) {     ostringstream os(  );     os << a;     return os.str();   }   template <typename T>   inline long long tolong(T a) {     long long res;     istringstream os(a);     os >> res;     return res;   }   template <typename T>   inline T gcd(T a, T b) {     if (b == 0)       return a;     else       return gcd(b, a % b);   }   template <typename T>   inline T bigmod(T a, T b, T m) {     if (b == 0)       return 1;     else if (b % 2 == 0)       return S(bigmod(a, b / 2, m)) % m;     else       return (a % m * bigmod(a, b - 1, m)) % m;   }   const int inf = (int)1e9 + 5;   const long long linf = (long long)1e16 + 5;   const long long modd = (long long)1e9 + 7;   const int mod = 10000007;   void pr(int f) {     if (f == 1)       cout <<  YES n ;     else       cout <<  NO n ;   }   bool isprime(long long n) {     if (n < 2) return 0;     if (n == 2)       return 1;     else {       for (int i = 2; i * i <= n; i++)         if (n % i == 0) return 0;     }     return 1;   }   map<int, int> mp;   multiset<string>::iterator it;   deque<char> q;   const int nax = 10e6 + 5;   int t[nax], l[100005], d[100005];   int main() {     ios_base::sync_with_stdio(0);     long long int n, m;     cin >> n >> m;     long long int low, high;     high = ((n - (m - 1)) * (n - m)) / 2;     long long int quo = n / m;     long long int rem = n % m;     low = rem * ((quo + 1) * (quo)) / 2 + (m - rem) * (quo * (quo - 1)) / 2;     cout << low <<     << high;   }   