For a given positive integer n denote its k-rounding as the minimum positive integer x, such that x ends with k or more zeros in base 10 and is divisible by n.

For example, 4-rounding of 375 is 375·80 = 30000. 30000 is the minimum integer such that it ends with 4 or more zeros and is divisible by 375.

Write a program that will perform the k-rounding of n.

Input

The only line contains two integers n and k (1 ≤ n ≤ 109, 0 ≤ k ≤ 8).

Output

Print the k-rounding of n.

Examples

Input

375 4


Output

30000


Input

10000 1


Output

10000


Input

38101 0


Output

38101


Input

123456789 8


Output

12345678900000000
#include <bits/stdc++.h>
using namespace std;
struct point {
  long double x, y;
};
struct vec {
  long double a, b;
};
struct line {
  long double a, b, c;
};
const long long MaxN = 1e6;
const long double eps = 1e-8;
const long long MaxNN = 1e3;
void build(long long, long long, long long);
long long _max(long long, long long, long long, long long, long long);
void update(long long, long long, long long, long long, long long, long long);
long double sqr(long double);
void start();
void extended(int);
point cin_point();
void cout_point(point);
point n_point(point, point);
vec mv(point, point);
line ml(point, point);
long double croos(vec, vec);
long double skalar(vec, vec);
int a[100000], d[400000], updateb[400000];
int main() {
  start();
  long long ans, n, k, f, t;
  cin >> n >> k;
  long long nn = n;
  f = t = k;
  while (n % 2 == 0 && t) {
    n /= 2;
    t--;
  }
  while (n % 5 == 0 && f) {
    n /= 5;
    f--;
  }
  long long tt = 1, ff = 1;
  for (int i = 0; i < t; i++) tt *= 2;
  for (int i = 0; i < f; i++) tt *= 5;
  cout << nn * tt * ff << endl;
  return 0;
}
void build(long long v, long long tl, long long tr) {
  if (tl == tr)
    d[v] = a[tl];
  else {
    long long tm = (tl + tr) / 2;
    build(v * 2, tl, tm);
    build(v * 2 + 1, tm + 1, tr);
    d[v] = max(d[v * 2], d[v * 2 + 1]);
  }
}
long long _max(long long v, long long tl, long long tr, long long l,
               long long r) {
  if (l > r) return 0;
  if (tl == l && tr == r) return d[v] + updateb[v];
  long long tm = (tl + tr) / 2;
  return max(_max(v * 2, tl, tm, l, min(r, tm)),
             _max(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r)) +
         updateb[v];
}
void update(long long v, long long tl, long long tr, long long l, long long r,
            long long s) {
  if (l > r) return;
  if (tl == l && tr == r) {
    updateb[v] += s;
    return;
  }
  long long tm = (tl + tr) / 2;
  update(v * 2, tl, tm, l, min(r, tm), s);
  update(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, s);
}
long double sqr(long double a) { return a * a; }
void start() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
void extended(int n) { cout << setprecision(n) << fixed; }
point cin_point() {
  point a;
  cin >> a.x >> a.y;
  return a;
}
void cout_point(point a) { cout << a.x << ' ' << a.y << endl; }
point n_point(point a, point b) {
  point n;
  n.x = a.x;
  n.y = b.y;
  return n;
}
vec mv(point st, point fn) {
  vec v;
  v.a = fn.x - st.x;
  v.b = fn.y - st.y;
  return v;
}
line ml(point a, point b) {
  line l;
  l.a = b.y - a.y;
  l.b = a.x - b.x;
  l.c = -l.a * a.x - l.b * a.y;
  return l;
}
long double skalar(vec a, vec b) { return a.a * b.a + a.b * b.b; }
long double cross(vec a, vec b) { return a.a * b.b - a.b * b.a; }
