#include <bits/stdc++.h>
using namespace std;
signed long long dp[2][160][160][2][2];
signed long long S[160][160][2][2];
signed long long mo = 1000000007;
int N, M;
signed long long diff(int x1, int x2, int y1, int y2, int ii, int jj) {
  signed long long ret = S[x2 + 1][y2 + 1][ii][jj] - S[x1][y2 + 1][ii][jj] -
                         S[x2 + 1][y1][ii][jj] + S[x1][y1][ii][jj];
  return ((ret % mo) + mo) % mo;
}
void solve() {
  int i, j, k, l, r, x, y, x2, y2, h;
  cin >> N >> M;
  for (x = 0; x < M; x++)
    for (y = x; y < M; y++) dp[1][x][y][0][0] = 1;
  signed long long ret = 0;
  for (h = 1; h <= N; h++) {
    signed long long tmp = 0;
    int cur = h % 2, tar = cur ^ 1;
    for (x = 0; x < M; x++)
      for (y = x; y < M; y++)
        tmp += dp[cur][x][y][0][0] + dp[cur][x][y][0][1] + dp[cur][x][y][1][0] +
               dp[cur][x][y][1][1];
    ret += tmp % mo * (N + 1 - h);
    memset(S, 0, sizeof(S));
    memset(dp[tar], 0, sizeof(dp[tar]));
    for (i = 0; i < 2; i++)
      for (j = 0; j < 2; j++) {
        for (x = 0; x < M; x++) {
          for (y = 0; y < M; y++)
            S[x + 1][y + 1][i][j] =
                (S[x + 1][y][i][j] + dp[cur][x][y][i][j]) % mo;
          for (y = 0; y < M; y++)
            S[x + 1][y + 1][i][j] =
                (S[x + 1][y + 1][i][j] + S[x][y + 1][i][j]) % mo;
        }
      }
    for (x = 0; x < M; x++)
      for (y = x; y < M; y++) {
        signed long long(&to)[2][2] = dp[tar][x][y];
        to[0][0] += diff(x, y, x, y, 0, 0);
        to[0][1] += diff(x, y, y + 1, M - 1, 0, 0);
        to[1][0] += diff(0, x - 1, x, y, 0, 0);
        to[1][1] += diff(0, x - 1, y + 1, M - 1, 0, 0);
        to[0][1] += diff(x, y, y, M - 1, 0, 1);
        to[1][1] += diff(0, x - 1, y, M - 1, 0, 1);
        to[1][0] += diff(0, x, x, y, 1, 0);
        to[1][1] += diff(0, x, y + 1, M - 1, 1, 0);
        to[1][1] += diff(0, x, y, M - 1, 1, 1);
        to[0][0] %= mo;
        to[0][1] %= mo;
        to[1][0] %= mo;
        to[1][1] %= mo;
      }
  }
  cout << ret % mo << endl;
}
int main(int argc, char** argv) {
  string s;
  int i;
  if (argc == 1) ios::sync_with_stdio(false);
  for (i = 0; i < argc - 1; i++) s += argv[i + 1], s += '\n';
  for (i = 0; i < s.size(); i++) ungetc(s[s.size() - 1 - i], stdin);
  solve();
  return 0;
}
