#include <bits/stdc++.h>
using namespace std;
const long long MODULO = 1000 * 1000 * 1000 + 7;
long long getLog(const long long nombre) {
  long long x = 1;
  int res = 0;
  while (x <= nombre) {
    x *= 2;
    res++;
  }
  return res - 1;
}
long long dynamique[100];
long long getPuissance(const long long puissance) {
  if (puissance < 3) {
    return 1 << puissance;
  }
  int log = getLog(puissance);
  if ((long long)1 << log == puissance) {
    if (dynamique[log] != 0) {
      return dynamique[log];
    }
    return dynamique[log] = getPuissance(puissance / 2) *
                            getPuissance(puissance / 2) % MODULO;
  }
  return getPuissance((long long)1 << log) *
         getPuissance(puissance - ((long long)1 << log)) % MODULO;
}
int main() {
  long long valeur, nbEtapes;
  cin >> valeur >> nbEtapes;
  if (valeur == 0) {
    cout << 0 << endl;
    return 0;
  }
  if (nbEtapes == 0) {
    cout << (2 * valeur) % MODULO << endl;
    return 0;
  }
  valeur = 2 * valeur - 1;
  valeur %= MODULO;
  valeur = (valeur * getPuissance(nbEtapes) + 1) % MODULO;
  cout << valeur << endl;
  return 0;
}
