#include <bits/stdc++.h>
using namespace std;
int n;
int ma = 0;
int L, R;
int a[211111];
pair<pair<int, int>, double> e[5555];
int lv[5555];
bool was[5555][10111];
float mem[5005][10111];
vector<int> v[5555];
map<int, double> ls;
int q;
double rec(int x, int val) {
  if (was[x][val - L]) return mem[x][val - L];
  if (v[x].size() == 0) {
    if (lv[x] + 1 < val) return 1;
    if (lv[x] + 1 == val) return 1 - e[x].second;
    return 0;
  }
  double p1 = 1;
  double p2 = 1;
  if (lv[x] >= val) p1 = 0;
  if (lv[x] + 1 >= val) p2 = 0;
  for (int i = 0; i < v[x].size(); i++) {
    p1 *= rec(v[x][i], val);
    p2 *= rec(v[x][i], val - 1);
  }
  double ret = p2 * e[x].second + p1 * (1 - e[x].second);
  was[x][val - L] = 1;
  return mem[x][val - L] = ret;
}
int main() {
  cin >> n >> q;
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    ma = max(ma, a[i]);
  }
  for (int i = 0; i < q; i++) {
    cin >> e[i].first.first >> e[i].first.second >> e[i].second;
    e[i].first.first--;
    e[i].first.second--;
  }
  for (int i = 0; i < q; i++)
    for (int j = i + 1; j < q; j++)
      if (e[i].first.second - e[i].first.first <
          e[j].first.second - e[j].first.first)
        swap(e[i], e[j]);
  int root = q;
  for (int i = 0; i < q; i++) {
    int d = 1e9;
    int h = -1;
    for (int j = 0; j < i; j++)
      if (e[j].first.first <= e[i].first.first &&
          e[j].first.second >= e[i].first.second &&
          e[j].first.second - e[j].first.first <= d) {
        d = e[j].first.second - e[j].first.first;
        h = j;
      }
    if (h == -1) h = root;
    v[h].push_back(i);
  }
  for (int i = 0; i < q; i++) {
    lv[i] = 0;
    for (int j = e[i].first.first; j <= e[i].first.second; j++)
      lv[i] = max(lv[i], a[j]);
  }
  L = ma - q;
  R = ma + q;
  ls[ma] = 0;
  for (int i = ma + 1; i <= ma + q + 1; i++) {
    double g = 1;
    for (int j = 0; j < v[root].size(); j++) g *= rec(v[root][j], i);
    ls[i] = g;
  }
  double ans = 0;
  for (int i = ma; i <= ma + q; i++) {
    double v = ls[i + 1] - ls[i];
    ans += i * v;
  }
  printf("%.15lf\n", ans);
  return 0;
}
