#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T min(T &a, T &b) {
  return a < b ? a : b;
}
template <class T>
inline T max(T &a, T &b) {
  return a > b ? a : b;
}
template <class T>
void read(T &x) {
  char ch;
  while ((ch = getchar()) && !isdigit(ch))
    ;
  x = ch - '0';
  while ((ch = getchar()) && isdigit(ch)) x = x * 10 + ch - '0';
}
struct point {
  int x, y;
  point() {}
  point(int _x, int _y) : x(_x), y(_y) {}
};
const int N = 160, Mod = 1000000007;
int dp[N][N][N][2][2], n, m, sum[N][N][N][2][2];
void add(int &a, int b) { a = (a + b) % Mod; }
inline int calc(int i, int p, int q, int x1, int y1, int x2, int y2) {
  if (x1 > x2) return 0;
  if (y1 > y2) return 0;
  int ans = sum[i][x2][y2][p][q];
  add(ans, -sum[i][x2][y1 - 1][p][q]);
  add(ans, -sum[i][x1 - 1][y2][p][q]);
  add(ans, sum[i][x1 - 1][y1 - 1][p][q]);
  ans = (ans + Mod) % Mod;
  return ans;
}
int ans = 0;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++)
      for (int k = j; k <= m; k++) {
        dp[i][j][k][0][0] = 1;
        add(dp[i][j][k][0][0], calc(i - 1, 0, 0, j, j, k, k));
        add(dp[i][j][k][0][1], calc(i - 1, 0, 0, j, k + 1, k, m));
        add(dp[i][j][k][0][1], calc(i - 1, 0, 1, j, k, k, m));
        add(dp[i][j][k][1][0], calc(i - 1, 0, 0, 1, j, j - 1, k));
        add(dp[i][j][k][1][0], calc(i - 1, 1, 0, 1, j, j, k));
        add(dp[i][j][k][1][1], calc(i - 1, 0, 0, 1, k + 1, j - 1, m));
        add(dp[i][j][k][1][1], calc(i - 1, 1, 0, 1, k, j - 1, m));
        add(dp[i][j][k][1][1], calc(i - 1, 0, 1, 1, k + 1, j, m));
        add(dp[i][j][k][1][1], calc(i - 1, 1, 1, 1, k, j, m));
        add(ans, dp[i][j][k][0][0]);
        add(ans, dp[i][j][k][0][1]);
        add(ans, dp[i][j][k][1][0]);
        add(ans, dp[i][j][k][1][1]);
      }
    for (int p = 0; p <= 1; p++)
      for (int q = 0; q <= 1; q++) {
        for (int j = 1; j <= m; j++)
          for (int k = 1; k <= m; k++) {
            sum[i][j][k][p][q] = dp[i][j][k][p][q];
            add(sum[i][j][k][p][q], sum[i][j - 1][k][p][q]);
            add(sum[i][j][k][p][q], sum[i][j][k - 1][p][q]);
            add(sum[i][j][k][p][q], -sum[i][j - 1][k - 1][p][q]);
            sum[i][j][k][p][q] = (sum[i][j][k][p][q] + Mod) % Mod;
          }
      }
  }
  printf("%d\n", ans);
}
