#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int h,w;
vector<int>a,b;
long ans=1,mod=1e9+7;
int main()
{
	cin>>h>>w;
	for(int i=0;i<h;i++)
	{
		int y;cin>>y;a.push_back(y);
	}
	for(int i=0;i<w;i++)
	{
		int y;cin>>y;b.push_back(y);
	}
	sort(a.begin(),a.end(),greater<int>());
	sort(b.begin(),b.end(),greater<int>());
	int cnt=0;
	long ia=0,ib=0;
	for(int i=h*w;i>0;i--)
	{
		long ca=0,cb=0;
		while(ia<h&&a[ia]==i)ia++,ca++;
		while(ib<w&&b[ib]==i)ib++,cb++;
		if(ca==0&&cb==0)
		{
			if(ia*ib<=cnt)
			{
				cout<<0<<endl;
				return 0;
			}
			ans=ans*(ia*ib-cnt)%mod;
			cnt++;
		}
		else if(ca>1||cb>1)
		{
			cout<<0<<endl;
			return 0;
		}
		else if(ca==1&&cb==1)
		{
			cnt++;
		}
		else if(ca==1&&cb==0)
		{
			ans=ans*ib%mod;
			cnt++;
		}
		else if(ca==0&&cb==1)
		{
			ans=ans*ia%mod;
			cnt++;
		}
	}
	cout<<ans<<endl;
}