#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7, NMAX = 160;
int N, M;
int DP[NMAX][2][2][NMAX][NMAX], SUM[NMAX][2][2][NMAX][NMAX];
void Mod(int &value) {
  value -= MOD;
  if (value < 0) value += MOD;
}
void ComputeSums(int i) {
  int j, k, left, right;
  for (j = 0; j < 2; ++j)
    for (k = 0; k < 2; ++k)
      for (left = 1; left <= M; ++left)
        for (right = 1; right <= M; ++right) {
          SUM[i][j][k][left][right] =
              DP[i][j][k][left][right] + SUM[i][j][k][left - 1][right];
          Mod(SUM[i][j][k][left][right]);
          SUM[i][j][k][left][right] += SUM[i][j][k][left][right - 1];
          Mod(SUM[i][j][k][left][right]);
          SUM[i][j][k][left][right] -= SUM[i][j][k][left - 1][right - 1] - MOD;
          Mod(SUM[i][j][k][left][right]);
        }
}
int GetSum(int i, int j, int k, int leftx, int lefty, int rightx, int righty) {
  int ret = SUM[i][j][k][lefty][righty] - SUM[i][j][k][lefty][rightx - 1] + MOD;
  Mod(ret);
  ret -= SUM[i][j][k][leftx - 1][righty] - MOD;
  Mod(ret);
  ret += SUM[i][j][k][leftx - 1][rightx - 1];
  Mod(ret);
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  int i, res = 0, left, right;
  cin >> N >> M;
  for (i = 1; i <= N; ++i) {
    for (left = 1; left <= M; ++left)
      for (right = left; right <= M; ++right) {
        DP[i][0][0][left][right] = 1;
        DP[i][0][0][left][right] +=
            GetSum(i - 1, 0, 0, left, right, left, right);
        Mod(DP[i][0][0][left][right]);
        res += DP[i][0][0][left][right];
        Mod(res);
      }
    for (left = 1; left <= M; ++left)
      for (right = left; right <= M; ++right) {
        DP[i][0][1][left][right] += GetSum(i - 1, 0, 1, left, right, right, M);
        Mod(DP[i][0][1][left][right]);
        DP[i][0][1][left][right] +=
            GetSum(i - 1, 0, 0, left, right, right + 1, M);
        Mod(DP[i][0][1][left][right]);
        res += DP[i][0][1][left][right];
        Mod(res);
      }
    for (left = 1; left <= M; ++left)
      for (right = left; right <= M; ++right) {
        DP[i][1][0][left][right] += GetSum(i - 1, 1, 0, 1, left, left, right);
        Mod(DP[i][1][0][left][right]);
        DP[i][1][0][left][right] +=
            GetSum(i - 1, 0, 0, 1, left - 1, left, right);
        Mod(DP[i][1][0][left][right]);
        res += DP[i][1][0][left][right];
        Mod(res);
      }
    for (left = 1; left <= M; ++left)
      for (right = left; right <= M; ++right) {
        DP[i][1][1][left][right] +=
            GetSum(i - 1, 0, 0, 1, left - 1, right + 1, M);
        Mod(DP[i][1][1][left][right]);
        DP[i][1][1][left][right] += GetSum(i - 1, 0, 1, 1, left - 1, right, M);
        Mod(DP[i][1][1][left][right]);
        DP[i][1][1][left][right] += GetSum(i - 1, 1, 0, 1, left, right + 1, M);
        Mod(DP[i][1][1][left][right]);
        DP[i][1][1][left][right] += GetSum(i - 1, 1, 1, 1, left, right, M);
        Mod(DP[i][1][1][left][right]);
        res += DP[i][1][1][left][right];
        Mod(res);
      }
    ComputeSums(i);
  }
  cout << res << '\n';
  return 0;
}
