#include <bits/stdc++.h>
using namespace std;
long long MOD = 1000000007;
vector<std::pair<int, int> > conditions[3];
int n;
bool isValid(int l, int r, int ll, int rr) {
  for (std::pair<int, int> p : conditions[0]) {
    if (p.first == ll || p.first == rr || p.second == ll || p.second == rr) {
      if (min(p.first, p.second) == ll && max(p.first, p.second) == rr)
        1;
      else
        return 0;
    }
  }
  for (std::pair<int, int> p : conditions[1]) {
    if (p.first == ll || p.first == rr || p.second == ll || p.second == rr) {
      if (min(p.first, p.second) == ll && max(p.first, p.second) == rr)
        return 0;
      if (p.first == ll || p.first == rr) {
        if (p.second >= l && p.second <= r)
          1;
        else
          return 0;
      } else {
        if (p.first >= l && p.first <= r) return 0;
      }
    }
  }
  for (std::pair<int, int> p : conditions[2]) {
    if (min(p.first, p.second) == ll && max(p.first, p.second) == rr) continue;
    if (p.first == ll || p.first == rr || p.second == ll || p.second == rr) {
      if (p.first == ll || p.first == rr) {
        if (p.second >= l && p.second <= r)
          1;
        else
          return 0;
      } else {
        if (p.first >= l && p.first <= r) return 0;
      }
    }
  }
  return 1;
}
long long dp[100][100];
int main() {
  int k;
  cin >> n >> k;
  for (int i = 0; i < (k); ++i) {
    string sign;
    int x, y;
    cin >> x >> sign >> y;
    x -= 1;
    y -= 1;
    if (sign == ">") sign = "<", swap(x, y);
    if (sign == ">=") sign = "<=", swap(x, y);
    if (x == y && (sign != "<"))
      continue;
    else if (x == y) {
      cout << 0 << endl;
      return 0;
    }
    if (sign == "=")
      conditions[0].push_back({x, y});
    else if (sign == "<")
      conditions[1].push_back({x, y});
    else
      conditions[2].push_back({x, y});
  }
  dp[0][0] = 1;
  long long ans = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j <= 2 * n - 2; ++j) {
      if (isValid(j, j + 2 * n - 2 * (i - 1) - 1, j, j + 1))
        dp[i][j + 2] += dp[i - 1][j];
      if (i == n) {
        ans += dp[i][j + 2];
        continue;
      }
      if (isValid(j, j + 2 * n - 2 * (i - 1) - 1, j,
                  j + 2 * n - 2 * (i - 1) - 1))
        dp[i][j + 1] += dp[i - 1][j];
      if (isValid(j, j + 2 * n - 2 * (i - 1) - 1, j + 2 * n - 2 * (i - 1) - 2,
                  j + 2 * n - 2 * (i - 1) - 1))
        dp[i][j] += dp[i - 1][j];
    }
  }
  cout << ans << endl;
  return 0;
}
