#include <bits/stdc++.h>
using namespace std;
const long long linf = 1e18 + 5;
const int mod = (int)1e9 + 7;
const int logN = 17;
const int inf = 1e9;
const int N = 153;
int n, m;
int dp[N][N][N][2][2];
int dp2[N][N][N];
int dp3[N][N][N];
int dp4[N][N][N];
int dp5[N][N][N];
int f(int k, int x, int y, bool t1, bool t2);
int lr(int k, int x, int y, int t1, int t2) {
  if (x > y || x < 1 || y > m) return 0;
  int &r = dp2[k][x][y];
  if (r != -1) return r;
  return r = ((((f(k, x, y, t1, t2) + lr(k, x - 1, y, t1, t2)) % mod +
                lr(k, x, y + 1, t1, t2)) %
                   mod -
               lr(k, x - 1, y + 1, t1, t2) + mod) %
              mod);
}
int rr(int k, int x, int y, int t1, int t2) {
  if (x > y || x < 1 || y > m) return 0;
  int &r = dp3[k][x][y];
  if (r != -1) return r;
  return r = ((((f(k, x, y, t1, t2) + rr(k, x + 1, y, t1, t2)) % mod +
                rr(k, x, y + 1, t1, t2)) %
                   mod -
               rr(k, x + 1, y + 1, t1, t2) + mod) %
              mod);
}
int ll(int k, int x, int y, int t1, int t2) {
  if (x > y || x < 1 || y > m) return 0;
  int &r = dp4[k][x][y];
  if (r != -1) return r;
  return r = ((((f(k, x, y, t1, t2) + ll(k, x - 1, y, t1, t2)) % mod +
                ll(k, x, y - 1, t1, t2)) %
                   mod -
               ll(k, x - 1, y - 1, t1, t2) + mod) %
              mod);
}
int rl(int k, int x, int y, int t1, int t2) {
  if (x > y || x < 1 || y > m) return 0;
  int &r = dp5[k][x][y];
  if (r != -1) return r;
  return r = ((((f(k, x, y, t1, t2) + rl(k, x + 1, y, t1, t2)) % mod +
                rl(k, x, y - 1, t1, t2)) %
                   mod -
               rl(k, x + 1, y - 1, t1, t2) + mod) %
              mod);
}
int f(int k, int x, int y, bool t1, bool t2) {
  if (y < x || x < 1 || y > m) return 0;
  if (k == n) return 1;
  int &r = dp[k][x][y][t1][t2];
  if (r != -1) return r;
  r = 0;
  if (t1 == 1 && t2 == 1) return r = 1 + rl(k + 1, x, y, t1, t2);
  if (t1 == 1 && t2 == 0)
    return r = (1 + rr(k + 1, x, y, t1, t2) + rl(k + 1, x, y - 1, 1, 1)) % mod;
  if (t1 == 0 && t2 == 1)
    return r = (1 + ll(k + 1, x, y, t1, t2) + rl(k + 1, x + 1, y, 1, 1)) % mod;
  r = 1 + lr(k + 1, x, y, 0, 0);
  r = (r + rr(k + 1, x + 1, y, 1, 0)) % mod;
  r = (r + ll(k + 1, x, y - 1, 0, 1)) % mod;
  r = (r + rl(k + 1, x + 1, y - 1, 1, 1)) % mod;
  return r;
}
int main() {
  scanf("%d %d", &n, &m);
  memset(dp, -1, sizeof dp);
  memset(dp2, -1, sizeof dp2);
  memset(dp3, -1, sizeof dp3);
  memset(dp4, -1, sizeof dp4);
  memset(dp5, -1, sizeof dp5);
  int ans = 0;
  for (int i = 1; i <= n; i++)
    for (int a = 1; a <= m; a++)
      for (int b = a; b <= m; b++) ans = (ans + f(i, a, b, 0, 0)) % mod;
  cout << ans << '\n';
  return 0;
}
