#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
using ll = long long;
using pii = pair<int, int>;

ll f(ll n){
    if (n % 200 == 0) n /= 200;
    else n = n * 1000 + 200;
    return n;
}

int main(){
    ll n,k;
    cin >> n >> k;
    rep(i,k) n = f(n);
    cout << n << endl;
}
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
#include <istream>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

int max(int, int);
int min(int, int);
int positiveNum(int);
unsigned long long factorial(int);
unsigned long long combination(int, int);
long long power(int, int);
bool between(int, int, int);
vector<string> split(string, char);
int digit_sum(int);
vector<long long> divisors(long long);
//cout << fixed << setprecision(15) << y << endl;
long long count_comb(long long, long long);


int main()
{
  long long n, k;
  cin >> n >> k;
  
  long long count = 0;
  
  for(long long i = 2; i <= 2 * n; i++)
  {
    if(count_comb(i, n) > 0 && count_comb(i + k, n) > 0)
    {
      count += count_comb(i, n) * count_comb(i + k, n);
    }
  }
  
  cout << count << endl;
   
  return 0;
}

long long count_comb(long long num, long long n)
{
  if(num <= n + 1)
  {
    return num - 1;
  }
  else
  {
    long long ans = n - (num - (n + 1));
    if(ans >= 0)
    {
      return ans;
    }
    else
    {
      return 0;
    }
  }
}
    
      
//2つの整数のうち大きい方を返す
int max(int a, int b)
{
  if(a > b)
  {
    return a;
  }
  else
  {
    return b;
  }
}
   
//2つの整数のうち小さい方を返す
int min(int a, int b)
{
  if(a < b)
  {
    return a;
  }
  else
  {
    return b;
  }
}

//入力が正ならその値，負なら0を返す
int positiveNum(int x)
{
  if(x >= 0)
  {
    return x;
  }
  else
  {
    return 0;
  }
}

//階乗
unsigned long long factorial(int n)
{
  unsigned long long ans = 1;
  
  for(int i = 1; i <= n; i++)
  {
    ans *= i;
  }
  
  return ans;
}

//mの中からn取る組み合わせの数
unsigned long long combination(int m, int n)
{
  return factorial(m) / (factorial(m-n)*factorial(n));
}

//cがaとbの間にあるか
bool between(int a, int b, int c)
{
  if(a > b)
  {
    int swap;
    swap = a;
    a = b;
    b = swap;
  }
  if(a <= c && c <= b)
  {
    return true;
  }
  else
  {
    return false;
  }
}

//累乗(long long版)
long long power(int x, int y)
{
  long long num = 1;
  
  for(int i = 0; i < y; i++)
  {
    num *= x;
  }
  
  return num;
}

//カンマ等で区切られた文字列を要素で分ける
vector<string> split(string s, char c)
{
  vector<string> v;

  stringstream ss{s};
  string buf;

  while(getline(ss, buf, c))
  {
    v.push_back(buf);
  }

  return v;

}

//各桁の和を求める
int digit_sum(int x)
{
  int sum = 0;
  
  while(x > 0)
  {
    sum += x % 10;
    x /= 10;
  }
  
  return sum;
}
  
//Nの約数を求める
vector<long long> divisors(long long N)
{
  vector<long long> a;
  
  for (long long i = 1; i * i <= N; i++)
  {
    if (N % i == 0)
    {
      a.push_back(i);
      if (N/i != i) 
      {
        a.push_back(N/i);
      }
    }
  }
  
  sort(a.begin(), a.end());
  
  return a;
}