#include <iostream>
#include <vector>
#define MAX1 1000000007
using namespace std;
long long d[1015][1015];
int main()
{
freopen("input.inp", "r", stdin);
freopen("output.out", "w", stdout);
long long h, w, x;
vector<long long> r, c;
cin >> h >> w;
bool all0 = 1;
for (long long i = 0; i < h; i++)
{
cin >> x;
r.push_back(x);
if (x != 0)
all0 = 0;
}
for (long long i = 0; i < w; i++)
{
cin >> x;
c.push_back(x);
if (x != 0)
all0 = 0;
}
if (all0)
{
long long ans = 1;
for (int i = 0; i < h * w; i++)
{
ans = ((ans % MAX1) * (2 % MAX1)) % MAX1;
}
cout<<ans%MAX1;
}
else
{
for (long long i = 0; i < h; i++)
{
long long temp = r[i] + 1;
for (long long j = 0; j < w; j++)
{
if (temp > 0)
{
d[i][j] = 1;
temp--;
}
}
}
for (long long i = 0; i < w; i++)
{
long long temp = c[i] + 1;
for (long long j = 0; j < h; j++)
{
if (temp > 0)
{
d[j][i] = 1;
temp--;
}
}
}
// for (long long i = 0; i < h; i++)
// {
// for (long long j = 0; j < w; j++)
// cout << d[i][j] << " ";
// cout << endl;
// }
bool haveans = 0;
long long ans = 1;
for (long long i = 0; i < h; i++)
for (long long j = 0; j < w; j++)
{
if (d[i][j] == 0)
{
ans = ((ans % MAX1) * (2 % MAX1)) % MAX1;
haveans = 1;
}
}
if (haveans == 0)
cout << 0;
else
{
cout << ans % MAX1;
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojZGVmaW5lIE1BWDEgMTAwMDAwMDAwNwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsb25nIGxvbmcgZFsxMDE1XVsxMDE1XTsKaW50IG1haW4oKQp7CiAgICBmcmVvcGVuKCJpbnB1dC5pbnAiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm91dHB1dC5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICBsb25nIGxvbmcgaCwgdywgeDsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IHIsIGM7CiAgICBjaW4gPj4gaCA+PiB3OwogICAgYm9vbCBhbGwwID0gMTsKICAgIGZvciAobG9uZyBsb25nIGkgPSAwOyBpIDwgaDsgaSsrKQogICAgewogICAgICAgIGNpbiA+PiB4OwogICAgICAgIHIucHVzaF9iYWNrKHgpOwogICAgICAgIGlmICh4ICE9IDApCiAgICAgICAgICAgIGFsbDAgPSAwOwogICAgfQogICAgZm9yIChsb25nIGxvbmcgaSA9IDA7IGkgPCB3OyBpKyspCiAgICB7CiAgICAgICAgY2luID4+IHg7CiAgICAgICAgYy5wdXNoX2JhY2soeCk7CiAgICAgICAgaWYgKHggIT0gMCkKICAgICAgICAgICAgYWxsMCA9IDA7CiAgICB9CiAgICBpZiAoYWxsMCkKICAgIHsKICAgICAgICBsb25nIGxvbmcgYW5zID0gMTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGggKiB3OyBpKyspCiAgICAgICAgewogICAgICAgICAgICBhbnMgPSAoKGFucyAlIE1BWDEpICogKDIgJSBNQVgxKSkgJSBNQVgxOwogICAgICAgIH0KICAgICAgICBjb3V0PDxhbnMlTUFYMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBmb3IgKGxvbmcgbG9uZyBpID0gMDsgaSA8IGg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGxvbmcgbG9uZyB0ZW1wID0gcltpXSArIDE7CiAgICAgICAgICAgIGZvciAobG9uZyBsb25nIGogPSAwOyBqIDwgdzsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAodGVtcCA+IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZFtpXVtqXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgdGVtcC0tOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAobG9uZyBsb25nIGkgPSAwOyBpIDwgdzsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgbG9uZyBsb25nIHRlbXAgPSBjW2ldICsgMTsKICAgICAgICAgICAgZm9yIChsb25nIGxvbmcgaiA9IDA7IGogPCBoOyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICh0ZW1wID4gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkW2pdW2ldID0gMTsKICAgICAgICAgICAgICAgICAgICB0ZW1wLS07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gZm9yIChsb25nIGxvbmcgaSA9IDA7IGkgPCBoOyBpKyspCiAgICAgICAgLy8gewogICAgICAgIC8vICAgICBmb3IgKGxvbmcgbG9uZyBqID0gMDsgaiA8IHc7IGorKykKICAgICAgICAvLyAgICAgICAgIGNvdXQgPDwgZFtpXVtqXSA8PCAiICI7CiAgICAgICAgLy8gICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICAvLyB9CiAgICAgICAgYm9vbCBoYXZlYW5zID0gMDsKICAgICAgICBsb25nIGxvbmcgYW5zID0gMTsKICAgICAgICBmb3IgKGxvbmcgbG9uZyBpID0gMDsgaSA8IGg7IGkrKykKICAgICAgICAgICAgZm9yIChsb25nIGxvbmcgaiA9IDA7IGogPCB3OyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChkW2ldW2pdID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYW5zID0gKChhbnMgJSBNQVgxKSAqICgyICUgTUFYMSkpICUgTUFYMTsKICAgICAgICAgICAgICAgICAgICBoYXZlYW5zID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIGlmIChoYXZlYW5zID09IDApCiAgICAgICAgICAgIGNvdXQgPDwgMDsKICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8IGFucyAlIE1BWDE7CiAgICAgICAgfQogICAgfQp9