#include <bits/stdc++.h>
using namespace std;
void debug() { cout << endl; }
template <class T, class... R>
void debug(T f, R... r) {
  cout << "[" << f << "]";
  debug(r...);
}
template <class T>
T mmin(T a, T b) {
  return min(a, b);
}
template <class T, class... R>
T mmin(T a, R... b) {
  return min(a, mmin(b...));
}
template <class T>
T mmax(T a, T b) {
  return max(a, b);
}
template <class T, class... R>
T mmax(T a, R... b) {
  return max(a, mmax(b...));
}
template <class T>
T mgcd(T a, T b) {
  return __gcd(a, b);
}
template <class T, class... R>
T mgcd(T a, R... b) {
  return __gcd(a, mgcd(b...));
}
void myin() {
  freopen("1.in", "r", stdin);
  freopen("1.out", "w", stdout);
}
namespace IO {
const int MX = 4e7;
char buf[MX];
int c, sz;
void begin() {
  c = 0;
  sz = fread(buf, 1, MX, stdin);
}
inline bool read(int &t) {
  while (c < sz && buf[c] != '-' && (buf[c] < '0' || buf[c] > '9')) c++;
  if (c >= sz) return false;
  bool flag = 0;
  if (buf[c] == '-') flag = 1, c++;
  for (t = 0; c < sz && '0' <= buf[c] && buf[c] <= '9'; c++)
    t = t * 10 + buf[c] - '0';
  if (flag) t = -t;
  return true;
}
}  // namespace IO
const long long N = 100005;
const long long M = 1e5 + 5;
const long long mod = 1e9 + 7;
long long dp[100005][2][2], ans[100005];
int main() {
  dp[1][0][0] = 1;
  dp[1][1][0] = 1;
  ans[1] = 2;
  for (long long i = 2; i <= 100000; ++i) {
    dp[i][0][0] = (dp[i - 1][1][0] + dp[i - 1][1][1]) % mod;
    dp[i][0][1] = dp[i - 1][0][0];
    dp[i][1][0] = (dp[i - 1][0][0] + dp[i - 1][0][1]) % mod;
    dp[i][1][1] = dp[i - 1][1][0];
    ans[i] = (dp[i][0][0] + dp[i][0][1] + dp[i][1][0] + dp[i][1][1]) % mod;
  }
  long long n, m;
  scanf("%lld%lld", &n, &m);
  printf("%lld\n", (ans[n] + ans[m] - 2 + mod) % mod);
  return 0;
}
