#include <bits/stdc++.h>
using namespace std;
int gcd(int x, int y) { return (!y ? x : gcd(y, x % y)); }
const int maxn = 3000, mod = 1e9 + 7;
map<int, int> a, b;
int c[maxn][maxn];
inline int ad(int x, int y) { return (x + y) % mod; }
inline int mu(int x, int y) { return 1LL * x * y % mod; }
int32_t main() {
  ios::sync_with_stdio(0), cin.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    a[x]++;
  }
  set<int> st;
  for (int i = 0; i < m; i++) {
    int x;
    cin >> x;
    b[x]++;
    st.insert(x);
  }
  for (int i = 0; i < maxn; i++)
    for (int j = 0; j <= i; j++) {
      if (j == 0)
        c[j][i] = 1;
      else
        c[j][i] = ad(c[j - 1][i - 1], c[j][i - 1]);
    }
  int ans = 1;
  for (auto i : st) {
    int x = a[i];
    int y = b[i];
    int mn = min(x, y);
    int res = 0;
    for (int ted = 0; ted <= mn; ted++) {
      res = ad(res, mu(c[ted][x], c[ted][y]));
    }
    ans = mu(ans, res);
  }
  cout << ad(ans, mod - 1) << '\n';
}
