#include <bits/stdc++.h>
using namespace std;

using VI = vector<int>;
using VVI = vector<VI>;
using PII = pair<int, int>;
using LL = long long;
using VL = vector<LL>;
using VVL = vector<VL>;
using PLL = pair<LL, LL>;
using VS = vector<string>;

#define ALL(a)  begin((a)),end((a))
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define SZ(a) int((a).size())
#define SORT(c) sort(ALL((c)))
#define RSORT(c) sort(RALL((c)))
#define UNIQ(c) (c).erase(unique(ALL((c))), end((c)))

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)

#define FF first
#define SS second
template<class S, class T>
istream& operator>>(istream& is, pair<S,T>& p){
  return is >> p.FF >> p.SS;
}
template<class S, class T>
ostream& operator<<(ostream& os, const pair<S,T>& p){
  return os << p.FF << " " << p.SS;
}
template<class T>
void maxi(T& x, T y){
  if(x < y) x = y;
}
template<class T>
void mini(T& x, T y){
  if(x > y) x = y;
}


const double EPS = 1e-10;
const double PI  = acos(-1.0);
const LL MOD = 1e9+7;

int acc1[5010][5010];
int acc2[5010][5010];

void add(int x, int y, int d){
  --acc1[x-d][y-d+1];
  ++acc1[x+1][y+2];
  
  ++acc2[x-d][y-d];
  --acc2[x+1][y-d];
}

int get(int x, int y){
  return acc1[x][y] + acc2[x][y];
}

int main(){
  cin.tie(0);
  ios_base::sync_with_stdio(false);

  int N, M;
  cin >> N >> M;
  REP(i,M){
	int a, b, x;
	cin >> a >> b >> x;
	add(a+x, b+x, x);
  }

  REP(x,N+1) REP(y,N+1){
	acc1[x][y] += (x>=1&&y>=1? acc1[x-1][y-1]: 0) + (y>=1? acc1[x][y-1]: 0) - (x>=1&&y>=2? acc1[x-1][y-2]: 0);
	acc2[x][y] += (x>=1? acc2[x-1][y]: 0) + (y>=1? acc2[x][y-1]: 0) - (x>=1&&y>=1? acc2[x-1][y-1]: 0);
  }

  int ans = 0;
  for(int x=1;x<=N;++x){
	for(int y=1;y<=x;++y){
	  if(get(x,y) > 0)
		++ans;
	}
  }
  cout << ans << endl;

  return 0;
}