#include<stdio.h>
#include<stdlib.h>
#ifndef TREE_H
#define TREE_H
typedef struct TreeNode {
int value[2];
struct TreeNode* left;
struct TreeNode* right;
}TreeNode;
TreeNode* creatNode(int value[2]);
void insertNode(TreeNode** root, int value[2]);
void freeTree(TreeNode* root);
void countTree(TreeNode* root,int *count);
#endif
TreeNode* creatNode(int value[2]) {
TreeNode* newnode = (TreeNode*)malloc(sizeof(TreeNode));
if (newnode == NULL) {
printf("Memory allocation error\n");
exit(1);
}
else {
newnode->value[0] = value[0];
newnode->value[1] = value[1];
newnode->left = NULL;
newnode->right = NULL;
}
return newnode;
}
void insertNode(TreeNode** root, int value[2]) {
if (*root == NULL) {
*root = creatNode(value);
}
else {
if ((*root)->value[0] > value[1]) {
insertNode(&((*root)->left), value);
}
else if ((*root)->value[1] < value[0]) {
insertNode(&((*root)->right), value);
}
else if ((*root)->value[0]<=value[0]&&(*root)->value[1]>=value[1]) {
}
else if ((*root)->value[0]>=value[0] && (*root)->value[1]<=value[1]) {
(*root)->value[0] = value[0];
(*root)->value[1] = value[1];
}
else if ((*root)->value[0]<=value[1]&& (*root)->value[1]>=value[1]) {
(*root)->value[0] = value[0];
}
else if ((*root)->value[0]<=value[0] && (*root)->value[1]>=value[0]) {
(*root)->value[1] = value[1];
}
else {
printf("error!!!\n");
exit(1);
}
}
}
void freeTree(TreeNode* root) {
if (root != NULL) {
freeTree(root->left);
freeTree(root->right);
free(root);
}
}
void countTree(TreeNode* root,int *count) {
if (root != NULL) {
*count += (root->value[1] - root->value[0] + 1);
countTree(root->left, count);
countTree(root->right, count);
}
}
int main() {
int number, area,count=0;
scanf("%d %d", &number, &area);
getchar();
TreeNode* root = NULL;
int (*value)[2] = malloc(area * sizeof(int[2]));
if (value == NULL) {
fprintf(stderr, "Memory allocation error\n");
exit(1);
}
for (int i = 0; i < area; i++) {
scanf("%d %d",&value[i][0],&value[i][1]);
getchar();
insertNode(&root, value[i]);
}
countTree(root, &count);
count = number + 1 - count;
printf("%d", count);
freeTree(root);
free(value);
return 0;
}