#include <bits/stdc++.h>
#define mod 1000000007
#define pb push_back
#define ll long long
#define mp make_pair
using namespace std;
ll fi[1009][1009];
ll cnt[1000009],sum[1000009];
int main(){
	vector<ll> a,b;
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		ll x;
		cin>>x;
		a.pb(x);
	}
	for(int i=0;i<m;i++){
		ll x;
		cin>>x;
		b.pb(x);
	}
	sort(a.begin(),a.end());
	sort(b.begin(),b.end());
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			fi[i][j]=min(a[i],b[j]);
			cnt[fi[i][j]]++;
		}
	}
	for(int i=m*n;i>=0;i--){
		sum[i]=sum[i+1]+cnt[i];
	}
	ll ans = 1;
	ll ac=a.size()-1,bc=b.size()-1;
	for(int i=m*n;i>=1;i--){
		if(ac>=0 && bc>=0 && a[ac]==i && b[bc]==i){
			ans *= 1;
			ac--;
			bc--;
		}
		else if(ac>=0 && a[ac]==i){
			ans *= b.size()-bc-1;
			ans %= mod;
			ac--;
		}
		else if(bc>=0 && b[bc]==i){
			ans *= a.size()-ac-1;
			ans %= mod;
			bc--;
		}
		else{
			ans *= (a.size()-ac-1)*(b.size()-bc-1)-(m*n-i);
			ans %= mod;
		}
	}
	cout<<ans<<endl;
	return 0;
}