#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
const double PI = acos(-1.0);
const double EPS = 1e-10;
inline int read() {
  static char ch;
  bool sgn = false;
  while (ch = getchar(), ch < '0' || ch > '9')
    if (ch == '-') sgn = true;
  int res = ch - 48;
  while (ch = getchar(), ch >= '0' && ch <= '9') res = res * 10 + ch - 48;
  return sgn ? -res : res;
}
const int N = 151;
int n, m, ans, dp[N][2][2][N][N], s[N][2][2][N][N];
void prepare(int i) {
  for (int l = 0; l < 2; l++)
    for (int r = 0; r < 2; r++)
      for (int j = 1; j <= m; j++)
        for (int k = 1; k <= m; k++)
          (s[i][l][r][j][k] += (s[i][l][r][j - 1][k] + s[i][l][r][j][k - 1] -
                                s[i][l][r][j - 1][k - 1]) %
                                   1000000007 +
                               dp[i][l][r][j][k]) %= 1000000007,
              (s[i][l][r][j][k] += 1000000007) %= 1000000007;
}
int cal(int k, int l, int r, int x, int y, int xx, int yy) {
  return ((s[k][l][r][xx][yy] + s[k][l][r][x - 1][y - 1] -
           s[k][l][r][x - 1][yy] - s[k][l][r][xx][y - 1]) %
              1000000007 +
          1000000007) %
         1000000007;
}
int main() {
  n = read(), m = read();
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      for (int k = j; k <= m; k++) {
        dp[i][0][0][j][k] = 1;
        (dp[i][0][0][j][k] += cal(i - 1, 0, 0, j, j, k, k)) %= 1000000007;
        ans += dp[i][0][0][j][k];
        ans %= 1000000007;
        (dp[i][0][1][j][k] += cal(i - 1, 0, 1, j, k, k, m)) %= 1000000007;
        (dp[i][0][1][j][k] += cal(i - 1, 0, 0, j, k + 1, k, m)) %= 1000000007;
        ans += dp[i][0][1][j][k];
        ans %= 1000000007;
        (dp[i][1][0][j][k] += cal(i - 1, 1, 0, 1, j, j, k)) %= 1000000007;
        (dp[i][1][0][j][k] += cal(i - 1, 0, 0, 1, j, j - 1, k)) %= 1000000007;
        ans += dp[i][1][0][j][k];
        ans %= 1000000007;
        (dp[i][1][1][j][k] += cal(i - 1, 0, 0, 1, k + 1, j - 1, m)) %=
            1000000007;
        (dp[i][1][1][j][k] += cal(i - 1, 1, 1, 1, k, j, m)) %= 1000000007;
        (dp[i][1][1][j][k] += cal(i - 1, 1, 0, 1, k + 1, j, m)) %= 1000000007;
        (dp[i][1][1][j][k] += cal(i - 1, 0, 1, 1, k, j - 1, m)) %= 1000000007;
        ans += dp[i][1][1][j][k];
        ans %= 1000000007;
      }
    }
    prepare(i);
  }
  cout << (ans + 1000000007) % 1000000007;
}
