type rec=record x,y,l,r,c:longint; end; var ans,l,m,i,x,y,tot:longint; tree:array[0..40000] of rec; procedure make(l,r:longint); var now:longint; begin inc(tot); now:=tot; tree[now].x:=l; tree[now].y:=r; if l+1<=r then begin tree[now].l:=tot+1; make(l,(l+r) div 2); tree[now].r:=tot+1; make((l+r) div 2+1,r); end; end; procedure insert(v,x,y:longint); begin if (x<=tree[v].x)and(tree[v].y<=y) then begin inc(tree[v].c); exit; end; if x<=(tree[v].x+tree[v].y) div 2 then insert(tree[v].l,x,y); if y>(tree[v].x+tree[v].y) div 2 then insert(tree[v].r,x,y); end; procedure find(v:longint); begin if v=0 then exit; if tree[v].c>0 then begin inc(ans,tree[v].y-tree[v].x+1); exit; end; find(tree[v].l); find(tree[v].r); end; begin readln(l,m); make(1,l+1); for i:=1 to m do begin readln(x,y); insert(1,x+1,y+1); end; find(1); //writeln(ans,' ',l); writeln(l+1-ans); end. /************************************************************** Problem: 2253 User: admin Language: Pascal Result: Wrong Answer ****************************************************************/