#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 5;
int h, w;
int grilla[MAXN][MAXN];
int R[MAXN];
int C[MAXN];
bool SE_PUEDE = true;
void printGrilla() {
  for (int i = (0); i < (h); i++) {
    for (int j = (0); j < (w); j++) {
      cout << grilla[i][j] << " ";
    }
    cout << endl;
  }
}
void pintarNegro(int fila, int col) {
  if (fila < h and col < w) {
    if (grilla[fila][col] == 1) {
      SE_PUEDE = false;
    }
    grilla[fila][col] = 2;
  }
}
void pintarDireccion(int dy, int dx, int fila, int col, int cant) {
  for (int i = (0); i < (cant); i++) {
    if (grilla[fila][col] == 2) {
      SE_PUEDE = false;
    }
    grilla[fila][col] = 1;
    fila += dy;
    col += dx;
  }
  pintarNegro(fila, col);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> h >> w;
  for (int i = (0); i < (h); i++) cin >> R[i];
  for (int i = (0); i < (w); i++) cin >> C[i];
  for (int fila = (0); fila < (h); fila++) {
    pintarDireccion(0, 1, fila, 0, R[fila]);
  }
  for (int col = (0); col < (w); col++) {
    pintarDireccion(1, 0, 0, col, C[col]);
  }
  if (!SE_PUEDE) {
    cout << 0 << endl;
    return 0;
  }
  long long cont = 1;
  long long MOD = 1e9 + 7;
  for (int i = (0); i < (h); i++)
    for (int j = (0); j < (w); j++) {
      if (grilla[i][j] == 0) {
        cont *= 2LL;
        cont %= MOD;
      }
    }
  cout << cont << endl;
}
