### BUGGY CODE ###

# -*- coding: utf-8 -*-
import sys
import itertools#これは色々使える組み込み関数みたいなやつ
import math#数学的計算はこれでいける。普通に0.5乗しても計算可能
#w=input()
N, M=input().split()
N=int(N)
M=int(M)
i=0
ID_list=[]
ID_sublist=[]
gate_possible_list=[]
#センテンスを暗記するのではなく、まずinput()を書いて、膨らます感じで記述する。すると#思考の流れ通りに書ける。素晴らしい！
for i in range(N):
 ID_list.append(i+1)
#print(ID_list)
#for i in range(N)
gate_list =  [list(map(int, input().split(" ")))for i in range(M)]
#センテンスを暗記するのではなく、まずinput()を書いて、膨らます感じで記述する。すると#思考の流れ通りに書ける。素晴らしい！

#x=[]
#y=[]
#t, x, y = [0]*(N+1), [0]*(N+1), [0]*(N+1)#N+1個の空のリストを作成(原点を入れて##るから一つ増える)
#delta_t=0
#delta_x=0
#delta_y=0
#l=0
#t[0],x[0],y[0]=[0, 0, 0]
#とりあえず入力までは完成した．
#for i in range(N):
# t[i+1], x[i+1], y[i+1] = map(int, input().split())
#child_i =  list(map(int, input().split()))
#w_len=len(w)
#w_list=list(w)
#print(len(w_list))
#print(w_list)
#child_il=sorted(child_i)
#print(child_il)#リストの右端のほうが大きい
i=0
j=0
k=0
l=0
m=0
for i in range(M):#ゲートの個数分回す
 for j in range(gate_list[i][1]-gate_list[i][0]+1):
     gate_possible_list.append(gate_list[i][0]+j)
 #print(gate_possible_list)
 for k in range(len(ID_list)):
     for j in range(len(gate_possible_list)):
      if ID_list[k]==gate_possible_list[j]:
         ID_sublist.append(gate_possible_list[j])
      else:
          pass

 gate_possible_list=[]
 ID_list=[]
 for m in range(len(ID_sublist)):
  ID_list.append(ID_sublist[m])
 #print(ID_list)
 ID_sublist=[]
print(len(ID_list))
#これ時間かかりまくり

### FIXED CODE ###

# -*- coding: utf-8 -*-
import sys
import itertools#これは色々使える組み込み関数みたいなやつ
import math#数学的計算はこれでいける。普通に0.5乗しても計算可能
#w=input()
N, M=input().split()
N=int(N)
M=int(M)
i=0
ID_list=[]
ID_sublist=[]
gate_possible_list=[]
#センテンスを暗記するのではなく、まずinput()を書いて、膨らます感じで記述する。すると#思考の流れ通りに書ける。素晴らしい！
for i in range(N):
 ID_list.append(i+1)
#print(ID_list)
#for i in range(N)
gate_list =  [list(map(int, input().split(" ")))for i in range(M)]
#センテンスを暗記するのではなく、まずinput()を書いて、膨らます感じで記述する。すると#思考の流れ通りに書ける。素晴らしい！

#x=[]
#y=[]
#t, x, y = [0]*(N+1), [0]*(N+1), [0]*(N+1)#N+1個の空のリストを作成(原点を入れて##るから一つ増える)
#delta_t=0
#delta_x=0
#delta_y=0
#l=0
#t[0],x[0],y[0]=[0, 0, 0]
#とりあえず入力までは完成した．
#for i in range(N):
# t[i+1], x[i+1], y[i+1] = map(int, input().split())
#child_i =  list(map(int, input().split()))
#w_len=len(w)
#w_list=list(w)
#print(len(w_list))
#print(w_list)
#child_il=sorted(child_i)
#print(child_il)#リストの右端のほうが大きい
i=0
j=0
k=0
l=0
m=0
mini=gate_list[0][0]
maxi=gate_list[0][1]
for i in range(M):
  if mini <gate_list[i][0]:
      mini=gate_list[i][0]
i=0
for i in range(M):
  if maxi >gate_list[i][1]:
      maxi=gate_list[i][1]
#print(maxi, mini)
if maxi-mini<0:
    print(0)
else:
 print(maxi-mini+1)


      
#for i in range(M):#ゲートの個数分回す
# for j in range(gate_list[i][1]-gate_list[i][0]+1):
#     gate_possible_list.append(gate_list[i][0]+j)
 #print(gate_possible_list)
# for k in range(len(ID_list)):
#     for j in range(len(gate_possible_list)):
#      if ID_list[k]==gate_possible_list[j]:
#         ID_sublist.append(gate_possible_list[j])
#      else:
#          pass
#
# gate_possible_list=[]
# ID_list=[]
# for m in range(len(ID_sublist)):
#  ID_list.append(ID_sublist[m])
# #print(ID_list)
# ID_sublist=[]
#print(len(ID_list))
#これ時間かかりまくり