#include <bits/stdc++.h>
using namespace std;
struct T {
  int a;
};
vector<int> op[6][75];
long long int dp[75][75];
int ckk(int l, int lf, int rt) {
  int fl = 0;
  for (int i = 0; i < op[0][l].size(); i++)
    if (op[0][l][i] != l + 1) return 0;
  for (int i = 0; i < op[0][l + 1].size(); i++)
    if (op[0][l + 1][i] != l) return 0;
  for (int i = 0; i < op[1][l].size(); i++)
    if (op[1][l][i] >= lf && op[1][l][i] <= rt) return 0;
  for (int i = 0; i < op[1][l + 1].size(); i++)
    if (op[1][l + 1][i] >= lf && op[1][l + 1][i] <= rt) return 0;
  for (int i = 0; i < op[2][l].size(); i++)
    if (op[2][l][i] == l + 1) return 0;
  for (int i = 0; i < op[2][l + 1].size(); i++)
    if (op[2][l + 1][i] == l) return 0;
  for (int i = 0; i < op[3][l].size(); i++)
    if (op[3][l][i] >= lf && op[3][l][i] <= rt && op[3][l][i] != l + 1)
      return 0;
  for (int i = 0; i < op[3][l + 1].size(); i++)
    if (op[3][l + 1][i] >= lf && op[3][l + 1][i] <= rt && op[3][l + 1][i] != l)
      return 0;
  return 1;
}
int ckkr(int l, int lf, int rt) {
  int fl = 0;
  for (int i = 0; i < op[0][l].size(); i++)
    if (op[0][l][i] != l + 1) return 0;
  for (int i = 0; i < op[0][l + 1].size(); i++)
    if (op[0][l + 1][i] != l) return 0;
  for (int i = 0; i < op[1][l].size(); i++)
    if (op[1][l][i] >= lf && op[1][l][i] <= rt) return 0;
  for (int i = 0; i < op[1][l + 1].size(); i++)
    if (op[1][l + 1][i] >= lf && op[1][l + 1][i] <= rt) return 0;
  for (int i = 0; i < op[2][l].size(); i++)
    if (op[2][l][i] == l + 1) return 0;
  for (int i = 0; i < op[2][l + 1].size(); i++)
    if (op[2][l + 1][i] == l) return 0;
  for (int i = 0; i < op[3][l].size(); i++)
    if (op[3][l][i] >= lf && op[3][l][i] <= rt && op[3][l][i] != l + 1)
      return 0;
  for (int i = 0; i < op[3][l + 1].size(); i++)
    if (op[3][l + 1][i] >= lf && op[3][l + 1][i] <= rt && op[3][l + 1][i] != l)
      return 0;
  return 1;
}
int ckklr(int l, int r) {
  for (int i = 0; i < op[0][l].size(); i++)
    if (op[0][l][i] != r) return 0;
  for (int i = 0; i < op[0][r].size(); i++)
    if (op[0][r][i] != l) return 0;
  for (int i = 0; i < op[1][l].size(); i++)
    if (op[1][l][i] >= l && op[1][l][i] <= r) return 0;
  for (int i = 0; i < op[1][r].size(); i++)
    if (op[1][r][i] >= l && op[1][r][i] <= r) return 0;
  for (int i = 0; i < op[3][l].size(); i++)
    if (op[3][l][i] >= l && op[3][l][i] <= r && op[3][l][i] != r) return 0;
  for (int i = 0; i < op[3][r].size(); i++)
    if (op[3][r][i] >= l && op[3][r][i] <= r && op[3][r][i] != l) return 0;
  return 1;
}
vector<int> arr;
long long int rec(int l, int r) {
  if (r - l + 1 == 2) {
    if (op[2][l].size() || op[2][r].size()) return 0;
    for (int i = 0; i < op[4][l].size(); i++)
      if (op[4][l][i] != r) return 0;
    for (int i = 0; i < op[4][r].size(); i++)
      if (op[4][r][i] != l) return 0;
    for (int i = 0; i < op[0][l].size(); i++)
      if (op[0][l][i] != r) return 0;
    for (int i = 0; i < op[0][r].size(); i++)
      if (op[0][r][i] != l) return 0;
    return 1;
  }
  long long int &ret = dp[l][r];
  if (ret != -1) return ret;
  ret = 0;
  int fl = ckklr(l, r);
  if (fl == 1) ret = ret + rec(l + 1, r - 1);
  fl = ckk(l, l, r);
  if (fl == 1) ret = ret + rec(l + 2, r);
  fl = ckkr(r - 1, l, r);
  if (fl == 1) ret = ret + rec(l, r - 2);
  return ret;
}
int main() {
  int i, j, k, l, t, cs = 1, r = 1, s, m, n, a, b, c, d, e, f, g, h, u, v;
  scanf("%d %d", &n, &k);
  char st[44];
  for (i = 0; i < k; i++) {
    scanf("%d %s %d", &a, &st, &b);
    a--;
    b--;
    if (a == b && st[0] != '=' && strlen(st) == 1) {
      printf("0\n");
      return 0;
    }
    if (a == b) continue;
    if (strcmp(st, "=") == 0) {
      op[0][a].push_back(b);
      op[0][b].push_back(a);
    }
    if (strcmp(st, ">") == 0) {
      op[1][a].push_back(b);
      op[2][b].push_back(a);
    }
    if (strcmp(st, "<") == 0) {
      op[2][a].push_back(b);
      op[1][b].push_back(a);
    }
    if (strcmp(st, ">=") == 0) {
      op[3][a].push_back(b);
      op[4][b].push_back(a);
    }
    if (strcmp(st, "<=") == 0) {
      op[4][a].push_back(b);
      op[3][b].push_back(a);
    }
  }
  memset(dp, -1, sizeof(dp));
  printf("%I64d\n", rec(0, n + n - 1));
  return 0;
}
