#include <iostream>
#include <algorithm>
#define llint long long
#define mod 1000000007

using namespace std;

llint h, w;
llint a[1005], b[1005];

int main(void)
{
	cin >> h >> w;
	for(int i = 0; i < h; i++) cin >> a[i];
	for(int i = 0; i < w; i++) cin >> b[i];
	sort(a, a+h);
	sort(b, b+w);
	
	for(int i = 0; i < h-1; i++){
		if(a[i] == a[i+1]){
			cout << 0 << endl;
			return 0;
		}
	}
	for(int i = 0; i < w-1; i++){
		if(b[i] == b[i+1]){
			cout << 0 << endl;
			return 0;
		}
	}
	
	llint ans = 1;
	for(int i = h*w; i >= 1; i--){
		int r = lower_bound(a, a+h, i) - a;
		int c = lower_bound(b, b+w, i) - b;
		if(a[r] == i && b[c] == i) continue;
		if(a[r] == i) ans *= w-c, ans %= mod;
		else if(b[c] == i) ans *= h-r, ans %= mod;
		else{
			llint rem = (h-r)*(w-c)-(h*w-i);
			if(rem <= 0){
				cout << 0 << endl;
				return 0;
			}
			ans *= rem, ans %= mod;
		}
	}
	cout << ans << endl;
	
	return 0;
}