#include<bits/stdc++.h>
#define rep(i,s,t) for (int i=s;i<=t;i++)

using namespace std;

typedef pair<int, int> PII;
typedef pair<PII, PII> PPP;
const int MAXN = 1E6 + 10;
const int maxn = MAXN;
int n, m;
int e[MAXN][4];
double hor[MAXN], ver[MAXN];
int length[MAXN][2];
vector<int> g[MAXN];
double suma[MAXN], sumb[MAXN];
double pro[2][MAXN];
int x[maxn], y[maxn];
int main()
{
	scanf("%d%d", &n, &m);
	map<int,int> tree[2];
	for (int i = 1; i <= n; ++i){
		scanf("%d%d%d%d", &e[i][0], &e[i][1], &e[i][2], &e[i][3]);
		tree[0][e[i][0]] = 1;
		tree[0][e[i][2]] = 1;
		length[i][0] = e[i][2] - e[i][0] + 1;
		length[i][1] = e[i][3] - e[i][1] + 1;
		tree[1][e[i][1]] = 1;
		tree[1][e[i][3]] = 1;
	}
	rep(i,1,m)
	{
		scanf("%d%d%lf%lf",&x[i], &y[i], &hor[i], &ver[i]);
		tree[0][x[i]] = 1;
		tree[1][y[i]] = 1;
		hor[i] /= 100.0;
		ver[i] /= 100.0;
	}
	int cnt1 = 0, cnt2 = 0;
	for (auto xx = tree[0].begin(); xx != tree[0].end(); xx++)
		xx->second = ++cnt1;
	for (auto xx = tree[1].begin(); xx != tree[1].end(); xx++)
		xx->second = ++cnt2;
	rep(i,1,n)
	{
		e[i][0] = tree[0][e[i][0]];
		e[i][1] = tree[1][e[i][1]];
		e[i][2] = tree[0][e[i][2]];
		e[i][3] = tree[1][e[i][3]];
	}
	rep(i,1,cnt1) pro[0][i] = 1;
	rep(i,1,cnt2) pro[1][i] = 1;
	rep(i,1,m)
	{
		x[i] = tree[0][x[i]];
		y[i] = tree[1][y[i]];
		pro[0][x[i]] = pro[0][x[i]] * (1 - ver[i]);
		pro[1][y[i]] = pro[1][y[i]] * (1 - hor[i]);
	}
	rep(i,1,cnt1)
	{
		pro[0][i] = 1 - pro[0][i];
		suma[i] = suma[i-1] + pro[0][i];
	}
	rep(i,1,cnt2)
	{
		pro[1][i] = 1 - pro[1][i];
		sumb[i] = sumb[i-1] + pro[1][i];
	}
	int cnt = 0;
	double ans = 0;
	rep(i,1,n)
	{
		double sb = sumb[e[i][3]] - sumb[e[i][1] - 1];
		double sa = suma[e[i][2]] - suma[e[i][0] - 1];
		//cout << sa << " " << sb << endl;
		//cout << length[i][1] << " " << length[i][0] << endl;
		ans += sa * length[i][1] + sb * length[i][0] - sa * sb;
	}
	printf("%.10lf\n", ans);
	return 0;
}

