#include <bits/stdc++.h>
using namespace std;
long long dp[100005][3][3][3][3], sdp[100005][3][3], mod = (1e9) + 7, n, m;
long long op(long long pos, long long a, long long ac, long long b,
             long long bc) {
  if (pos == m + 1) return 1;
  if (dp[pos][a][ac][b][bc] != -1) return dp[pos][a][ac][b][bc];
  long long i, j, k = 0, x, y, p, q;
  for (i = 0; i < 2; i++) {
    if (a == i) {
      x = ac + 1;
    } else
      x = 1;
    for (j = 0; j < 2; j++) {
      if (j == b) {
        y = bc + 1;
      } else {
        y = 1;
      }
      p = x, q = y;
      if (i == j) {
        p++;
        q++;
      }
      if (p <= 2 && q <= 2) {
        k += op(pos + 1, i, p, j, q);
        k %= mod;
      }
    }
  }
  return dp[pos][a][ac][b][bc] = k;
}
long long sop(long long pos, long long a, long long ac) {
  if (pos == m + 1) return 1;
  if (sdp[pos][a][ac] != -1) return sdp[pos][a][ac];
  long long i, j, k = 0, x, y;
  for (i = 0; i < 2; i++) {
    if (a == i) {
      x = ac + 1;
    } else
      x = 1;
    if (x <= 2) {
      k += sop(pos + 1, i, x);
      k %= mod;
    }
  }
  return sdp[pos][a][ac] = k;
}
int32_t main() {
  long long i, j, k, a, b, c, x, y, z;
  cin >> n >> m;
  if (n > m) {
    swap(n, m);
  }
  if (n == 1) {
    for (i = 0; i <= m; i++) {
      for (j = 0; j < 3; j++) {
        for (k = 0; k < 3; k++) {
          sdp[i][j][k] = -1;
        }
      }
    }
    a = sop(1, 0, 0);
    cout << a << "\n";
  } else {
    for (i = 0; i <= m; i++) {
      for (j = 0; j < 3; j++) {
        for (k = 0; k < 3; k++) {
          for (a = 0; a < 3; a++) {
            for (b = 0; b < 3; b++) {
              dp[i][j][k][a][b] = -1;
            }
          }
        }
      }
    }
    a = op(1, 0, 0, 0, 0);
    cout << a << "\n";
  }
  return 0;
}
