#include<bits/stdc++.h>
using namespace std;
using ll=long long;
 
int main(void)
{
    ll N, K;
    cin >> N >> K;

    ll ans = 0;
    for (ll i = 1; i <= N; i++)
    {
        for (ll j = 1; j <= K; j++)
        {
            ans += (100 * i) + j;
        }
    }
    cout << ans << endl;
}
#include <iostream>

using namespace std;
using LL = long long;

const int kMaxN = 20;
const int kMaxL = 73;
const int kP[kMaxN] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71};

int s[kMaxL], c;
LL f[kMaxL + 1][1 << kMaxN];
LL a, b, ans;

LL C(int i, int j) {  // 可选最小数为i，已选j个数的基础上，可以得到的集合数
  if (f[i][j]) {      // 已经求解过
    return f[i][j];
  }
  f[i][j] = 1;                        // 当前集合算一个方案
  for (int k = i; k <= b - a; k++) {  // 枚举下一个数
    if (s[k] && (j & s[k]) == 0) {    // 不能有重复质数
      f[i][j] += C(k + 1, j | s[k]);  // 递归求解，累加方案数
    }
  }
  return f[i][j];
}

int main() {
  cin >> a >> b;
  for (long long i = a; i <= b; i++) {    // 枚举范围内每个数
    for (int j = 0; j < kMaxN; j++) {     // 枚举每个质数
      s[i - a] |= (i % kP[j] == 0) << j;  // 计算包含的质数集
    }
    c += !s[i - a];  // 累加质数集为空的数的数量
  }
  cout << C(0, 0) * (1 << c);  // 质数集为空的数任选
  return 0;
}