#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;   }